{
  "contractName": "VoucherKernel",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokensContract",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newBosonRouter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_triggeredBy",
          "type": "address"
        }
      ],
      "name": "LogBosonRouterSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newCancelFaultPeriod",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_triggeredBy",
          "type": "address"
        }
      ],
      "name": "LogCancelFaultPeriodChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newCashier",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_triggeredBy",
          "type": "address"
        }
      ],
      "name": "LogCashierSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newComplainPeriod",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_triggeredBy",
          "type": "address"
        }
      ],
      "name": "LogComplainPeriodChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_triggeredBy",
          "type": "address"
        }
      ],
      "name": "LogExpirationTriggered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_triggeredBy",
          "type": "address"
        }
      ],
      "name": "LogFinalizeVoucher",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "_type",
          "type": "uint8"
        }
      ],
      "name": "LogFundsReleased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_promiseId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_seller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_validFrom",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_validTo",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_idx",
          "type": "uint256"
        }
      ],
      "name": "LogPromiseCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        }
      ],
      "name": "LogVoucherComplain",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_tokenIdSupply",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_issuer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_holder",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_promiseId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_correlationId",
          "type": "uint256"
        }
      ],
      "name": "LogVoucherDelivered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        }
      ],
      "name": "LogVoucherFaultCancel",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_holder",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_promiseId",
          "type": "bytes32"
        }
      ],
      "name": "LogVoucherRedeemed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        }
      ],
      "name": "LogVoucherRefunded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_tokenIdSupply",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_issuer",
          "type": "address"
        }
      ],
      "name": "LogVoucherSetFaultCancel",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MASK_NF_INDEX",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "MASK_TYPE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "TYPE_NF_BIT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "bosonRouterAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "cancelFaultPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "cashierAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "complainPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "ordersPromise",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "paymentDetails",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "paymentMethod",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "addressTokenPrice",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "addressTokenDeposits",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "promiseKeys",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "promises",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "promiseId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "seller",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "validFrom",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "validTo",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "depositSe",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "depositBu",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "idx",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tokenNonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "tokensContract",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "typeCounters",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "typeId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "vouchersStatus",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "status",
          "type": "uint8"
        },
        {
          "internalType": "bool",
          "name": "isPaymentReleased",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "isDepositsReleased",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "complainPeriodStart",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "cancelFaultPeriodStart",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_seller",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_validFrom",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_validTo",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_price",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_depositSe",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_depositBu",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        }
      ],
      "name": "createTokenSupplyID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdSupply",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "_paymentMethod",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "_tokenPrice",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenDeposits",
          "type": "address"
        }
      ],
      "name": "createPaymentMethod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdSupply",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_issuer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_holder",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_correlationId",
          "type": "uint256"
        }
      ],
      "name": "fillOrder",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_issuer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenIdSupply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_qty",
          "type": "uint256"
        }
      ],
      "name": "burnSupplyOnPause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_msgSender",
          "type": "address"
        }
      ],
      "name": "redeem",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_msgSender",
          "type": "address"
        }
      ],
      "name": "refund",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_msgSender",
          "type": "address"
        }
      ],
      "name": "complain",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_msgSender",
          "type": "address"
        }
      ],
      "name": "cancelOrFault",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdSupply",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_issuer",
          "type": "address"
        }
      ],
      "name": "cancelOrFaultVoucherSet",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        }
      ],
      "name": "setPaymentReleased",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        }
      ],
      "name": "setDepositsReleased",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        }
      ],
      "name": "triggerExpiration",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        }
      ],
      "name": "triggerFinalizeVoucher",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdSupply",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_newSeller",
          "type": "address"
        }
      ],
      "name": "setSupplyHolderOnTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bosonRouterAddress",
          "type": "address"
        }
      ],
      "name": "setBosonRouterAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_cashierAddress",
          "type": "address"
        }
      ],
      "name": "setCashierAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_complainPeriod",
          "type": "uint256"
        }
      ],
      "name": "setComplainPeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_cancelFaultPeriod",
          "type": "uint256"
        }
      ],
      "name": "setCancelFaultPeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_idx",
          "type": "uint256"
        }
      ],
      "name": "getPromiseKey",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        }
      ],
      "name": "getIdSupplyFromVoucher",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        }
      ],
      "name": "getPromiseIdFromVoucherId",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenSupplyId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "getRemQtyForSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdSupply",
          "type": "uint256"
        }
      ],
      "name": "getOrderCosts",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdSupply",
          "type": "uint256"
        }
      ],
      "name": "getBuyerOrderCosts",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdSupply",
          "type": "uint256"
        }
      ],
      "name": "getSellerDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        }
      ],
      "name": "getVoucherStatus",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        }
      ],
      "name": "getVoucherHolder",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdSupply",
          "type": "uint256"
        }
      ],
      "name": "getSupplyHolder",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdSupply",
          "type": "uint256"
        }
      ],
      "name": "getVoucherPriceToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdSupply",
          "type": "uint256"
        }
      ],
      "name": "getVoucherDepositToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdSupply",
          "type": "uint256"
        }
      ],
      "name": "getVoucherPaymentMethod",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        }
      ],
      "name": "isInValidityPeriod",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenIdVoucher",
          "type": "uint256"
        }
      ],
      "name": "isVoucherTransferable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokensContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newBosonRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_triggeredBy\",\"type\":\"address\"}],\"name\":\"LogBosonRouterSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newCancelFaultPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_triggeredBy\",\"type\":\"address\"}],\"name\":\"LogCancelFaultPeriodChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newCashier\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_triggeredBy\",\"type\":\"address\"}],\"name\":\"LogCashierSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newComplainPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_triggeredBy\",\"type\":\"address\"}],\"name\":\"LogComplainPeriodChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_triggeredBy\",\"type\":\"address\"}],\"name\":\"LogExpirationTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_triggeredBy\",\"type\":\"address\"}],\"name\":\"LogFinalizeVoucher\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"_type\",\"type\":\"uint8\"}],\"name\":\"LogFundsReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_promiseId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_seller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_validFrom\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_validTo\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_idx\",\"type\":\"uint256\"}],\"name\":\"LogPromiseCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"}],\"name\":\"LogVoucherComplain\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenIdSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_issuer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_holder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_promiseId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_correlationId\",\"type\":\"uint256\"}],\"name\":\"LogVoucherDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"}],\"name\":\"LogVoucherFaultCancel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_holder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_promiseId\",\"type\":\"bytes32\"}],\"name\":\"LogVoucherRedeemed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"}],\"name\":\"LogVoucherRefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenIdSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_issuer\",\"type\":\"address\"}],\"name\":\"LogVoucherSetFaultCancel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MASK_NF_INDEX\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MASK_TYPE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TYPE_NF_BIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bosonRouterAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_issuer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenIdSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_qty\",\"type\":\"uint256\"}],\"name\":\"burnSupplyOnPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelFaultPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_msgSender\",\"type\":\"address\"}],\"name\":\"cancelOrFault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdSupply\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_issuer\",\"type\":\"address\"}],\"name\":\"cancelOrFaultVoucherSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cashierAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_msgSender\",\"type\":\"address\"}],\"name\":\"complain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"complainPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_paymentMethod\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"_tokenPrice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenDeposits\",\"type\":\"address\"}],\"name\":\"createPaymentMethod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_seller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_validFrom\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_validTo\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_depositSe\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_depositBu\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_quantity\",\"type\":\"uint256\"}],\"name\":\"createTokenSupplyID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdSupply\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_issuer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_correlationId\",\"type\":\"uint256\"}],\"name\":\"fillOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdSupply\",\"type\":\"uint256\"}],\"name\":\"getBuyerOrderCosts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"}],\"name\":\"getIdSupplyFromVoucher\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdSupply\",\"type\":\"uint256\"}],\"name\":\"getOrderCosts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"}],\"name\":\"getPromiseIdFromVoucherId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_idx\",\"type\":\"uint256\"}],\"name\":\"getPromiseKey\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenSupplyId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"getRemQtyForSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdSupply\",\"type\":\"uint256\"}],\"name\":\"getSellerDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdSupply\",\"type\":\"uint256\"}],\"name\":\"getSupplyHolder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdSupply\",\"type\":\"uint256\"}],\"name\":\"getVoucherDepositToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"}],\"name\":\"getVoucherHolder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdSupply\",\"type\":\"uint256\"}],\"name\":\"getVoucherPaymentMethod\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdSupply\",\"type\":\"uint256\"}],\"name\":\"getVoucherPriceToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"}],\"name\":\"getVoucherStatus\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"}],\"name\":\"isInValidityPeriod\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"}],\"name\":\"isVoucherTransferable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"ordersPromise\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"paymentDetails\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"paymentMethod\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"addressTokenPrice\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"addressTokenDeposits\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"promiseKeys\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"promises\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"promiseId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"validFrom\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validTo\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositSe\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBu\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_msgSender\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_msgSender\",\"type\":\"address\"}],\"name\":\"refund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bosonRouterAddress\",\"type\":\"address\"}],\"name\":\"setBosonRouterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_cancelFaultPeriod\",\"type\":\"uint256\"}],\"name\":\"setCancelFaultPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_cashierAddress\",\"type\":\"address\"}],\"name\":\"setCashierAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_complainPeriod\",\"type\":\"uint256\"}],\"name\":\"setComplainPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"}],\"name\":\"setDepositsReleased\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"}],\"name\":\"setPaymentReleased\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdSupply\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_newSeller\",\"type\":\"address\"}],\"name\":\"setSupplyHolderOnTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokenNonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokensContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"}],\"name\":\"triggerExpiration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdVoucher\",\"type\":\"uint256\"}],\"name\":\"triggerFinalizeVoucher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"typeCounters\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"vouchersStatus\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isPaymentReleased\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isDepositsReleased\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"complainPeriodStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cancelFaultPeriodStart\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Notes:  - Since this is a reference app, it is not yet optimized.      In the next phase, the bulk raw data will be packed into a single bytes32 field and/or pushed off-chain.  - The usage of block.timestamp is honored since vouchers are defined currently with day-precision.      See: https://ethereum.stackexchange.com/questions/5924/how-do-ethereum-mining-nodes-maintain-a-time-consistent-with-the-network/5931#5931\",\"kind\":\"dev\",\"methods\":{\"burnSupplyOnPause(address,uint256,uint256)\":{\"details\":\"Token ID is derived following the same principles for both ERC-1155 and ERC-721\",\"params\":{\"_issuer\":\"The address of the token issuer\",\"_qty\":\"qty that should be burned\",\"_tokenIdSupply\":\"ID of the token type\"}},\"cancelOrFault(uint256,address)\":{\"params\":{\"_tokenIdVoucher\":\"ID of the voucher\"}},\"cancelOrFaultVoucherSet(uint256,address)\":{\"params\":{\"_issuer\":\"owner of the voucher\",\"_tokenIdSupply\":\"ID of the voucher set\"}},\"complain(uint256,address)\":{\"params\":{\"_msgSender\":\"account called the fn from the BR contract\",\"_tokenIdVoucher\":\"ID of the voucher\"}},\"createPaymentMethod(uint256,uint8,address,address)\":{\"params\":{\"_paymentMethod\":\"might be ETHETH, ETHTKN, TKNETH or TKNTKN\",\"_tokenDeposits\":\"token address which will hold the funds for the deposits of the voucher\",\"_tokenIdSupply\":\"_tokenIdSupply of the voucher set this is related to\",\"_tokenPrice\":\"token address which will hold the funds for the price of the voucher\"}},\"createTokenSupplyID(address,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"params\":{\"_depositBu\":\"Buyer's deposit\",\"_depositSe\":\"Seller's deposit\",\"_price\":\"Price (payment amount)\",\"_seller\":\"seller of the promise\",\"_validFrom\":\"Start of valid period\",\"_validTo\":\"End of valid period\"}},\"fillOrder(uint256,address,address,uint256)\":{\"params\":{\"_correlationId\":\"ID of the current interaction with the smart contract for a specific user\",\"_holder\":\"Address of the recipient of the voucher (ERC-721)\",\"_issuer\":\"Address of the token's issuer\",\"_tokenIdSupply\":\"ID of the supply token (ERC-1155)\"}},\"getBuyerOrderCosts(uint256)\":{\"params\":{\"_tokenIdSupply\":\"ID of the supply token\"},\"returns\":{\"_0\":\"returns a tuple (Payment amount, Buyer's deposit)\"}},\"getIdSupplyFromVoucher(uint256)\":{\"params\":{\"_tokenIdVoucher\":\"ID of the voucher token\"},\"returns\":{\"_0\":\"ID of the supply token\"}},\"getOrderCosts(uint256)\":{\"params\":{\"_tokenIdSupply\":\"ID of the supply token\"},\"returns\":{\"_0\":\"returns a tuple (Payment amount, Seller's deposit, Buyer's deposit)\"}},\"getPromiseIdFromVoucherId(uint256)\":{\"params\":{\"_tokenIdVoucher\":\"ID of the voucher token\"},\"returns\":{\"_0\":\"ID of the promise\"}},\"getPromiseKey(uint256)\":{\"params\":{\"_idx\":\"Index in the array of promise keys\"},\"returns\":{\"_0\":\"Promise ID\"}},\"getRemQtyForSupply(uint256,address)\":{\"params\":{\"_owner\":\"holder of the Token Supply\",\"_tokenSupplyId\":\"Token supply ID\"},\"returns\":{\"_0\":\"remaining quantity\"}},\"getSellerDeposit(uint256)\":{\"params\":{\"_tokenIdSupply\":\"ID of the supply token\"},\"returns\":{\"_0\":\"returns sellers deposit\"}},\"getSupplyHolder(uint256)\":{\"params\":{\"_tokenIdSupply\":\"ID of a promise which is mapped to the corresponding Promise\"},\"returns\":{\"_0\":\"Address of the holder\"}},\"getVoucherDepositToken(uint256)\":{\"params\":{\"_tokenIdSupply\":\"ID of the voucher supply token\"},\"returns\":{\"_0\":\"Address of the token\"}},\"getVoucherHolder(uint256)\":{\"params\":{\"_tokenIdVoucher\":\"ID of the voucher token\"},\"returns\":{\"_0\":\"Address of the holder\"}},\"getVoucherPaymentMethod(uint256)\":{\"params\":{\"_tokenIdSupply\":\"ID of the voucher supply token\"},\"returns\":{\"_0\":\"payment method\"}},\"getVoucherPriceToken(uint256)\":{\"params\":{\"_tokenIdSupply\":\"ID of the voucher supply token\"},\"returns\":{\"_0\":\"Address of the token\"}},\"getVoucherStatus(uint256)\":{\"params\":{\"_tokenIdVoucher\":\"ID of the voucher token\"},\"returns\":{\"_0\":\"Status of the voucher (via enum)\"}},\"isInValidityPeriod(uint256)\":{\"params\":{\"_tokenIdVoucher\":\"ID of the voucher token\"}},\"isVoucherTransferable(uint256)\":{\"params\":{\"_tokenIdVoucher\":\"ID of the voucher token\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"redeem(uint256,address)\":{\"params\":{\"_msgSender\":\"account called the fn from the BR contract\",\"_tokenIdVoucher\":\"ID of the voucher\"}},\"refund(uint256,address)\":{\"params\":{\"_msgSender\":\"account called the fn from the BR contract\",\"_tokenIdVoucher\":\"ID of the voucher\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setBosonRouterAddress(address)\":{\"params\":{\"_bosonRouterAddress\":\"The address of the BR contract\"}},\"setCancelFaultPeriod(uint256)\":{\"params\":{\"_cancelFaultPeriod\":\"the new value for cancelOrFault period (in number of seconds)\"}},\"setCashierAddress(address)\":{\"params\":{\"_cashierAddress\":\"The address of the BR contract\"}},\"setComplainPeriod(uint256)\":{\"params\":{\"_complainPeriod\":\"the new value for complain period (in number of seconds)\"}},\"setDepositsReleased(uint256)\":{\"params\":{\"_tokenIdVoucher\":\"ID of the voucher token\"}},\"setPaymentReleased(uint256)\":{\"params\":{\"_tokenIdVoucher\":\"ID of the voucher token\"}},\"setSupplyHolderOnTransfer(uint256,address)\":{\"params\":{\"_newSeller\":\"new holder of the supply\",\"_tokenIdSupply\":\"_tokenIdSupply which will be transferred\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"triggerExpiration(uint256)\":{\"params\":{\"_tokenIdVoucher\":\"ID of the voucher token\"}},\"triggerFinalizeVoucher(uint256)\":{\"params\":{\"_tokenIdVoucher\":\"ID of the voucher token\"}}},\"title\":\"VoucherKernel contract is controlling the core business logic\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"burnSupplyOnPause(address,uint256,uint256)\":{\"notice\":\"Extract a standard non-fungible tokens ERC-721 from a supply stored in ERC-1155\"},\"cancelOrFault(uint256,address)\":{\"notice\":\"Cancel/Fault transaction by the Seller, admitting to a fault or backing out of the deal\"},\"cancelOrFaultVoucherSet(uint256,address)\":{\"notice\":\"Cancel/Fault transaction by the Seller, cancelling the remaining uncommitted voucher set so that seller prevents buyers from committing to vouchers for items no longer in exchange.\"},\"complain(uint256,address)\":{\"notice\":\"Issue a complain for a voucher\"},\"createPaymentMethod(uint256,uint8,address,address)\":{\"notice\":\"Creates a Payment method struct recording the details on how the seller requires to receive Price and Deposits for a certain Voucher Set.\"},\"createTokenSupplyID(address,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"notice\":\"Creating a new promise for goods or services. Can be reused, e.g. for making different batches of these (in the future).\"},\"fillOrder(uint256,address,address,uint256)\":{\"notice\":\"Fill Voucher Order, iff funds paid, then extract & mint NFT to the voucher holder\"},\"getBuyerOrderCosts(uint256)\":{\"notice\":\"Get Buyer costs required to make an order for a supply token\"},\"getIdSupplyFromVoucher(uint256)\":{\"notice\":\"Get the supply token ID from a voucher token\"},\"getOrderCosts(uint256)\":{\"notice\":\"Get all necessary funds for a supply token\"},\"getPromiseIdFromVoucherId(uint256)\":{\"notice\":\"Get the promise ID from a voucher token\"},\"getPromiseKey(uint256)\":{\"notice\":\"Get the promise ID at specific index\"},\"getRemQtyForSupply(uint256,address)\":{\"notice\":\"Get the remaining quantity left in supply of tokens (e.g ERC-721 left in ERC-1155) of an account\"},\"getSellerDeposit(uint256)\":{\"notice\":\"Get Seller deposit\"},\"getSupplyHolder(uint256)\":{\"notice\":\"Get the holder of a supply\"},\"getVoucherDepositToken(uint256)\":{\"notice\":\"Get the address of the token where the deposits for the supply are held\"},\"getVoucherHolder(uint256)\":{\"notice\":\"Get the holder of a voucher\"},\"getVoucherPaymentMethod(uint256)\":{\"notice\":\"Get the payment method for a particular _tokenIdSupply\"},\"getVoucherPriceToken(uint256)\":{\"notice\":\"Get the address of the token where the price for the supply is held\"},\"getVoucherStatus(uint256)\":{\"notice\":\"Get the current status of a voucher\"},\"isInValidityPeriod(uint256)\":{\"notice\":\"Checks whether a voucher is in valid period for redemption (between start date and end date)\"},\"isVoucherTransferable(uint256)\":{\"notice\":\"Checks whether a voucher is in valid state to be transferred. If either payments or deposits are released, voucher could not be transferred\"},\"pause()\":{\"notice\":\"Pause the process of interaction with voucherID's (ERC-721), in case of emergency. Only BR contract is in control of this function.\"},\"redeem(uint256,address)\":{\"notice\":\"Redemption of the vouchers promise\"},\"refund(uint256,address)\":{\"notice\":\"Refunding a voucher\"},\"setBosonRouterAddress(address)\":{\"notice\":\"Set the address of the Boson Router contract\"},\"setCancelFaultPeriod(uint256)\":{\"notice\":\"Set the general cancelOrFault period, should be used sparingly as it has significant consequences. Here done simply for demo purposes.\"},\"setCashierAddress(address)\":{\"notice\":\"Set the address of the Cashier contract\"},\"setComplainPeriod(uint256)\":{\"notice\":\"Set the general complain period, should be used sparingly as it has significant consequences. Here done simply for demo purposes.\"},\"setDepositsReleased(uint256)\":{\"notice\":\"Mark voucher token that the deposits were released\"},\"setPaymentReleased(uint256)\":{\"notice\":\"Mark voucher token that the payment was released\"},\"setSupplyHolderOnTransfer(uint256,address)\":{\"notice\":\"Set the address of the new holder of a _tokenIdSupply on transfer\"},\"triggerExpiration(uint256)\":{\"notice\":\"Mark voucher token as expired\"},\"triggerFinalizeVoucher(uint256)\":{\"notice\":\"Mark voucher token to the final status\"},\"unpause()\":{\"notice\":\"Unpause the process of interaction with voucherID's (ERC-721). Only BR contract is in control of this function.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/VoucherKernel.sol\":\"VoucherKernel\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/UsingHelpers.sol\":{\"keccak256\":\"0xdc6b11800b974bf2a0d9107a9fa95fb118869f31885771b47ecff6664ae093b3\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ab894cd07b9c7c8afd891c2d25e8f440e52e16b42038d8bc143dada63b259cc\",\"dweb:/ipfs/QmfUUew1DHmT83TxjCuT3MRTLRpsi9obhi1uwDwBPgSfm8\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/VoucherKernel.sol\":{\"keccak256\":\"0xb25a46e3f9ca2bc17696e3876c164442593f778caff0818405635b295054b687\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f039c76ce1dd4f057f5fe651054af0dd1229931370c5745fe0e645dcdcb194\",\"dweb:/ipfs/QmXXibqbunwMNgiYDC42SfnPGp6ztN9k75NbygkAEiqjZL\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155.sol\":{\"keccak256\":\"0x34796b446a93c5ac705507913582dcab993b7cc86429c5e272b99597b64e51d9\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://51ba6851cc9c12c62f8ba7f20780880d590f1030c265edee05158064b9f67a36\",\"dweb:/ipfs/QmNidTbLJeMMFFk3iftCeWP9pLsFxdSHsckvakXgKnxoKC\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155ERC721.sol\":{\"keccak256\":\"0xb68cc7a34d977123a71b5c3e1bd1647378cbabee490c4c04666bc206815b6beb\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://bfe1b32910fc6676cc622fab356a87b98190f41a1c5eb81d9af82613515d019f\",\"dweb:/ipfs/QmYQXbVa4XqsHevFhFj55zaqoxAE6trp5fdT4SQmFpoFyB\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x39c55885f7e34a407316f0f15d337baaf69723252f154d7c727c97f818b23e5e\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://3c297eddef2d21c163eecc6758ae3fe9872594025eff98f22d3cb84d4771df9f\",\"dweb:/ipfs/QmTvQ8URMHEHy1GTBfYqkQZXcu1jb9DpxTWUbNFX7BrEX8\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC721.sol\":{\"keccak256\":\"0xff346a09a5d08dfe7196c4516d78522da0dec1bde99e04e0f3b269f96796d29f\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://197cdfdd6994addd3ef4702e3b367d4563f907106c6be50b2932cb7d336daf0c\",\"dweb:/ipfs/QmSKe383xVyeY8ecpEPHdvEevMVDR121Qqq4udmeaipXQe\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC721TokenReceiver.sol\":{\"keccak256\":\"0x7b8243200a7630a258025cc2a9fa2fec0ec9f009b0f6e4b7dc0b0bdcb64b2761\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://7a1037cfbea713ba1649ec7c9c44570e012cf3f2eafcec3fd7e8da323e81248b\",\"dweb:/ipfs/QmaZzB7rN4RyPhGgfn9Fkvf5K6ynd4owHj6vA8iMH2k3N9\"]},\"/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IVoucherKernel.sol\":{\"keccak256\":\"0x66567497a0c44e8b9932655e34df87aeba11ed8cb451b4fceffc3f3575839d3f\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://ba21239d29d9186785f7de199f6ec67cd7b14ff327405917eb15a1313bdd1dd3\",\"dweb:/ipfs/QmeHtpbNfT57dce5YyY4pwXcZj89CaMFkXAjYtjKEFAckh\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x549c5343ad9f7e3f38aa4c4761854403502574bbc15b822db2ce892ff9b79da7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://19c0dfbf7bb7744af0c03156e372d0096e0d07de8805ead7722243b8b42276a3\",\"dweb:/ipfs/QmPEFDvi6mJZ3sVii3uBs3CQzAARXPFwCKiHG5zkiCmC4V\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xe22a1fc7400ae196eba2ad1562d0386462b00a6363b742d55a2fd2021a58586f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a635cec58fb4141a16cfd408f1a21ac944c335a3beaba541c35d2e95c04536f\",\"dweb:/ipfs/QmXWcz73UenN1ji8jiWMbzxHjjfLbNQwLVKTEB5zNFE34K\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf89f005a3d98f7768cdee2583707db0ac725cf567d455751af32ee68132f3db3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f963d438177764b5f43f637c02311c951c0f0025d12fe1ac7e62e295bf416c41\",\"dweb:/ipfs/QmcfVb9JsWrYeTwFUJsKVHpKB7EaWBKydAH9S4sKg2pzcK\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0x4c5617b558186dc4b2b994b18ab9236410cd2dd1d9ad1213bbcca2e1d5321ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://27b103fe3d550cf3717751a2c67e14008806af25baa3916b5717eeb68a2767ad\",\"dweb:/ipfs/QmS6gG9XVCx3qco7ewaSgJdcQRfZuurqxqPnKmRJ3Dj7Fg\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620042ba380380620042ba833981810160405260208110156200003757600080fd5b5051600062000045620000ce565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b19169055600180546001600160a01b0319166001600160a01b039290921691909117905562093a80600e819055600f55620000d2565b3390565b6141d880620000e26000396000f3fe608060405234801561001057600080fd5b506004361061027d5760003560e01c806316ed9e0e146102825780631af2a6a8146102b15780631cf7955d146102ce5780631f38585f1461030157806321d6f3a71461033a578063325a7a84146103425780633f4ba83a14610383578063455e42f21461038d5780634f755c3e146103b9578063590f6f68146103c15780635b479d1a146103fd5780635c975abb1461042e57806365c303bc1461043657806366db9a0914610453578063715018a61461047f57806374898e82146104875780637518fa98146104b957806375549516146104c157806375a83102146104de57806376942aed146104fb578063797f2a26146105035780637ad226dc1461054d5780637bde82f2146105795780637ed06c44146105a5578063817b3084146105ad57806381dc8119146105d35780638456cb59146105f057806388106323146105f857806388c25607146106155780638990834b146106415780638cfb578e1461065e5780638da5cb5b146106665780638f940f631461066e57806399c849b8146106765780639a0271e1146106935780639a751bbd146106b0578063bc0d753d146106cd578063bd17de40146106ea578063c099a7c414610710578063cc2f84cb14610736578063cf5c9008146107a2578063d40ffcf8146107df578063d887b4e7146107fc578063d905af5514610837578063e31a00791461083f578063e5d5f9ac1461086b578063e875a613146108b4578063ebba1b29146108d1578063ec29c17d146108ee578063ede808971461093a578063f2fde38b14610957578063f3223bed1461097d578063f5d7aa1814610985578063f75951ce146109b1578063fad4ee94146109ce575b600080fd5b61029f6004803603602081101561029857600080fd5b5035610a04565b60408051918252519081900360200190f35b61029f600480360360208110156102c757600080fd5b5035610a22565b6102eb600480360360208110156102e457600080fd5b5035610a33565b6040805160ff9092168252519081900360200190f35b61031e6004803603602081101561031757600080fd5b5035610a48565b604080516001600160a01b039092168252519081900360200190f35b61029f610a73565b61035f6004803603602081101561035857600080fd5b5035610a7e565b6040805160ff90941684529115156020840152151582820152519081900360600190f35b61038b610aa7565b005b61029f600480360360408110156103a357600080fd5b50803590602001356001600160a01b0316610b50565b61031e610daf565b61038b600480360360808110156103d757600080fd5b508035906001600160a01b03602082013581169160408101359091169060600135610dbe565b61041a6004803603602081101561041357600080fd5b5035610ee4565b604080519115158252519081900360200190f35b61041a610f21565b61038b6004803603602081101561044c57600080fd5b5035610f31565b61038b6004803603604081101561046957600080fd5b50803590602001356001600160a01b03166111d4565b61038b611836565b61038b6004803603606081101561049d57600080fd5b506001600160a01b0381351690602081013590604001356118d0565b61031e611a37565b61038b600480360360208110156104d757600080fd5b5035611a46565b61029f600480360360208110156104f457600080fd5b5035611b6f565b61029f611b81565b61029f600480360360e081101561051957600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a08101359060c00135611b87565b61038b6004803603604081101561056357600080fd5b50803590602001356001600160a01b0316611f60565b61038b6004803603604081101561058f57600080fd5b50803590602001356001600160a01b0316612203565b61029f612552565b61029f600480360360208110156105c357600080fd5b50356001600160a01b031661255e565b61029f600480360360208110156105e957600080fd5b5035612570565b61038b612591565b61029f6004803603602081101561060e57600080fd5b5035612638565b61038b6004803603604081101561062b57600080fd5b50803590602001356001600160a01b031661265a565b61038b6004803603602081101561065757600080fd5b5035612737565b61031e6127db565b61031e6127ea565b61029f6127f9565b61029f6004803603602081101561068c57600080fd5b50356127ff565b61041a600480360360208110156106a957600080fd5b5035612811565b61031e600480360360208110156106c657600080fd5b5035612950565b61029f600480360360208110156106e357600080fd5b503561296e565b61038b6004803603602081101561070057600080fd5b50356001600160a01b03166129e1565b61038b6004803603602081101561072657600080fd5b50356001600160a01b0316612aee565b6107536004803603602081101561074c57600080fd5b5035612bfb565b60408051998a5260208a01989098526001600160a01b03909616888801526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b61038b600480360360808110156107b857600080fd5b5080359060ff602082013516906001600160a01b0360408201358116916060013516612c50565b61038b600480360360208110156107f557600080fd5b5035612d76565b6108196004803603602081101561081257600080fd5b5035612efb565b60408051938452602084019290925282820152519081900360600190f35b61029f612f2a565b61029f6004803603604081101561085557600080fd5b50803590602001356001600160a01b0316612f32565b6108886004803603602081101561088157600080fd5b5035612fbb565b6040805160ff90941684526001600160a01b039283166020850152911682820152519081900360600190f35b61031e600480360360208110156108ca57600080fd5b5035612feb565b61038b600480360360208110156108e757600080fd5b503561300b565b61090b6004803603602081101561090457600080fd5b5035613139565b6040805160ff909616865293151560208601529115158484015260608401526080830152519081900360a00190f35b61038b6004803603602081101561095057600080fd5b503561316f565b61038b6004803603602081101561096d57600080fd5b50356001600160a01b0316613213565b61029f613303565b61038b6004803603604081101561099b57600080fd5b50803590602001356001600160a01b0316613309565b61031e600480360360208110156109c757600080fd5b503561377c565b6109eb600480360360208110156109e457600080fd5b50356137fa565b6040805192835260208301919091528051918290030190f35b60078181548110610a1157fe5b600091825260209091200154905081565b6001600160801b031981165b919050565b60009081526006602052604090205460ff1690565b600090815260086020908152604080832054835260049091529020600201546001600160a01b031690565b6001600160801b0381565b60009081526009602052604090205460ff80821692610100830482169262010000900490911690565b6002546001600160a01b0316610af5576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b03163314610b46576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b610b4e613824565b565b6002546000906001600160a01b0316610ba1576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b03163314610bf2576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b610bfa610f21565b15610c3f576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b816001600160a01b0316610c5284610a48565b6001600160a01b031614610ca0576040805162461bcd60e51b815260206004820152601060248201526f2aa720aaaa2427a924ad22a22fa1a7a360811b604482015290519081900360640190fd5b6000610cac8484612f32565b905060008111610cf1576040805162461bcd60e51b815260206004820152600b60248201526a4f464645525f454d50545960a81b604482015290519081900360640190fd5b60015460408051637a94c56560e11b81526001600160a01b03868116600483015260248201889052604482018590529151919092169163f5298aca91606480830192600092919082900301818387803b158015610d4d57600080fd5b505af1158015610d61573d6000803e3d6000fd5b5050604080518781526001600160a01b038716602082015281517fd771b32487969df897bdfc40b573cff1c37f81bc0e62b60cacc027d0efd6d33f9450908190039091019150a19392505050565b6003546001600160a01b031681565b6002546001600160a01b0316610e0c576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b03163314610e5d576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b610e688484846138c7565b6000610e75848487613b5f565b9050847fce3b32c0b6a7ffab6dec7497bc73336faeb8e1b3b0b8dc7099699a3595f000a6828686610ea58661296e565b604080519485526001600160a01b0393841660208601529190921683820152606083019190915260808201869052519081900360a00190a25050505050565b600081815260096020526040812054610100900460ff1680610f1a575060008281526009602052604090205462010000900460ff165b1592915050565b600054600160a01b900460ff1690565b80610f74576040805162461bcd60e51b815260206004820152600e60248201526d155394d41150d25192515117d25160921b604482015290519081900360640190fd5b60008181526009602052604090205460ff16610f91816001613dc7565b15610fd7576040805162461bcd60e51b81526020600482015260116024820152701053149150511657d19253905312569151607a1b604482015290519081900360640190fd5b6000610fe16140a4565b60046000610fee8661296e565b815260208082019290925260409081016000208151610120810183528154815260018201549381019390935260028101546001600160a01b031691830191909152600380820154606084015260048201546080840152600582015460a0840152600682015460c0840152600782015460e084015260089091015461010083015290915061107c908490613dc7565b156110c05761108c836002613dc7565b1561109a57600191506110bb565b600f546000858152600960205260409020600201540142106110bb57600191505b61115e565b6110cb836002613dc7565b80156110ec5750600e54600085815260096020526040902060010154014210155b156110fa576001915061115e565b61110383613dd8565b80611112575061111283613dff565b1561113c57600e546000858152600960205260409020600101540142106110bb576001915061115e565b61114583613e17565b1561115e57600e54816080015101421061115e57600191505b81156111ce5761116f836001613e2b565b600085815260096020908152604091829020805460ff191660ff94909416939093179092558051868152339281019290925280517f28c953c622aa90e006382693080fb83e2add147a386446e0f24572c6b071adfa9281900390910190a15b50505050565b6111dc610f21565b15611221576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002546001600160a01b031661126f576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b031633146112c0576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b600154604080516331a9108f60e11b8152600481018590529051849284926001600160a01b0380851693921691636352211e91602480820192602092909190829003018186803b15801561131357600080fd5b505afa158015611327573d6000803e3d6000fd5b505050506040513d602081101561133d57600080fd5b50516001600160a01b03161461138b576040805162461bcd60e51b815260206004820152600e60248201526d2aa720aaaa2427a924ad22a22fab60911b604482015290519081900360640190fd5b6000848152600960205260409020546113a89060ff166003613dc7565b156113ef576040805162461bcd60e51b81526020600482015260126024820152711053149150511657d0d3d35413105253915160721b604482015290519081900360640190fd5b60008481526009602052604090205461140c9060ff166001613dc7565b15611452576040805162461bcd60e51b81526020600482015260116024820152701053149150511657d19253905312569151607a1b604482015290519081900360640190fd5b61145a6140a4565b600460006114678761296e565b8152602080820192909252604090810160009081208251610120810184528154815260018201548186015260028201546001600160a01b0316818501526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152888252600990935220549091506114fb9060ff16613dd8565b8061151c575060008581526009602052604090205461151c9060ff16613dff565b1561167a5760008581526009602052604090205461153e9060ff166002613dc7565b6115a357600f54600e54600087815260096020526040902060010154010142111561159e576040805162461bcd60e51b81526020600482015260166024820152600080516020614123833981519152604482015290519081900360640190fd5b6115fb565b600e54600086815260096020526040902060010154014211156115fb576040805162461bcd60e51b81526020600482015260166024820152600080516020614123833981519152604482015290519081900360640190fd5b60008581526009602052604090204260028201555461161e9060ff166003613e2b565b600086815260096020908152604091829020805460ff191660ff9490941693909317909255805187815290517f0411cc6d1d8430de89b9f9fdd063617e55946cddb8538d3407f516882db59455929181900390910190a161182f565b6000858152600960205260409020546116959060ff16613e17565b15611755576000858152600960205260409020546116b79060ff166002613dc7565b61170a57600f54600e548260800151010142111561159e576040805162461bcd60e51b81526020600482015260166024820152600080516020614123833981519152604482015290519081900360640190fd5b600e548160800151014211156115fb576040805162461bcd60e51b81526020600482015260166024820152600080516020614123833981519152604482015290519081900360640190fd5b6000858152600960205260409020546117729060ff166002613dc7565b156117ec57600e54600086815260096020526040902060010154014211156117cf576040805162461bcd60e51b81526020600482015260166024820152600080516020614123833981519152604482015290519081900360640190fd5b60008581526009602052604090205461161e9060ff166003613e2b565b6040805162461bcd60e51b8152602060048201526013602482015272494e4150504c494341424c455f53544154555360681b604482015290519081900360640190fd5b5050505050565b61183e613e38565b6001600160a01b031661184f6127ea565b6001600160a01b031614611898576040805162461bcd60e51b81526020600482018190526024820152600080516020614143833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020614163833981519152908390a3600080546001600160a01b0319169055565b6118d8610f21565b611920576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6003546001600160a01b031661196e576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6003546001600160a01b031633146119be576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4360901b604482015290519081900360640190fd5b60015460408051637a94c56560e11b81526001600160a01b03868116600483015260248201869052604482018590529151919092169163f5298aca91606480830192600092919082900301818387803b158015611a1a57600080fd5b505af1158015611a2e573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b031681565b6003546001600160a01b0316611a94576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6003546001600160a01b03163314611ae4576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4360901b604482015290519081900360640190fd5b80611b27576040805162461bcd60e51b815260206004820152600e60248201526d155394d41150d25192515117d25160921b604482015290519081900360640190fd5b6000818152600960209081526040808320805461ff0019166101001790558051848152918201929092528151600080516020614183833981519152929181900390910190a150565b60086020526000908152604090205481565b600f5481565b6002546000906001600160a01b0316611bd8576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b03163314611c29576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b85871115611c76576040805162461bcd60e51b8152602060048201526015602482015274494e56414c49445f56414c49444954595f46524f4d60581b604482015290519081900360640190fd5b4261012c01861015611cc5576040805162461bcd60e51b8152602060048201526013602482015272494e56414c49445f56414c49444954595f544f60681b604482015290519081900360640190fd5b6001600160a01b0388166000908152600560209081526040918290208054600181019091558251808301919091528083018a905260608082018a9052835180830390910181526080909101909252815191012060075415611d9857600081815260046020526040902060080154600780548392908110611d4157fe5b90600052602060002001541415611d98576040805162461bcd60e51b815260206004820152601660248201527550524f4d4953455f414c52454144595f45584953545360501b604482015290519081900360640190fd5b604051806101200160405280828152602001600560008c6001600160a01b03166001600160a01b031681526020019081526020016000205481526020018a6001600160a01b0316815260200189815260200188815260200187815260200186815260200185815260200160078054905081525060046000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801559050506007819080600181540180825580915050600190039060005260206000200160009091909190915055886001600160a01b0316600560008b6001600160a01b03166001600160a01b0316815260200190815260200160002054827fc05e9e3de4c67624681fddccb848a2f81797e05e1c09faf702ed3c526a6660e08b8b60016007805490500360405180848152602001838152602001828152602001935050505060405180910390a4611f53898285613e3c565b9998505050505050505050565b611f68610f21565b15611fad576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002546001600160a01b0316611ffb576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b0316331461204c576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b600154604080516331a9108f60e11b8152600481018590529051849284926001600160a01b0380851693921691636352211e91602480820192602092909190829003018186803b15801561209f57600080fd5b505afa1580156120b3573d6000803e3d6000fd5b505050506040513d60208110156120c957600080fd5b50516001600160a01b031614612117576040805162461bcd60e51b815260206004820152600e60248201526d2aa720aaaa2427a924ad22a22fab60911b604482015290519081900360640190fd5b6000848152600960205260409020546121329060ff16613fd7565b612179576040805162461bcd60e51b8152602060048201526013602482015272494e4150504c494341424c455f53544154555360681b604482015290519081900360640190fd5b61218284612811565b506000848152600960205260409020426001820155546121a69060ff166005613e2b565b600085815260096020908152604091829020805460ff191660ff9490941693909317909255805186815290517f66d163993c35c8d3a90f3fbce008096384de89ec441c60c9b9f79aaad36616ff929181900390910190a150505050565b61220b610f21565b15612250576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002546001600160a01b031661229e576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b031633146122ef576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b600154604080516331a9108f60e11b8152600481018590529051849284926001600160a01b0380851693921691636352211e91602480820192602092909190829003018186803b15801561234257600080fd5b505afa158015612356573d6000803e3d6000fd5b505050506040513d602081101561236c57600080fd5b50516001600160a01b0316146123ba576040805162461bcd60e51b815260206004820152600e60248201526d2aa720aaaa2427a924ad22a22fab60911b604482015290519081900360640190fd5b6000848152600960205260409020546123d59060ff16613fd7565b61241a576040805162461bcd60e51b81526020600482015260116024820152701053149150511657d41493d0d154d4d151607a1b604482015290519081900360640190fd5b61242384612811565b5061242c6140a4565b600460006124398761296e565b815260208082019290925260409081016000908120825161012081018452815481526001808301548287015260028301546001600160a01b0316828601526003830154606083015260048301546080830152600583015460a083015260068084015460c0840152600784015460e08401526008909301546101008301528a8452600990955292909120429381019390935591549092506124de9160ff90911690613e2b565b600086815260096020908152604091829020805460ff191660ff9490941693909317909255825181518881526001600160a01b0388169381019390935282820152517f43a88bfc6f85aab9491c25f0ce50c4046d7cb7d4dc209b40914a2574d9855a5c916060908290030190a15050505050565b6001600160801b031981565b60056020526000908152604090205481565b60006007828154811061257f57fe5b90600052602060002001549050919050565b6002546001600160a01b03166125df576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b03163314612630576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b610b4e613fe5565b6000908152600860209081526040808320548352600490915290206006015490565b6002546001600160a01b03166126a8576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b031633146126f9576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b6000918252600860209081526040808420548452600490915290912060020180546001600160a01b0319166001600160a01b03909216919091179055565b61273f613e38565b6001600160a01b03166127506127ea565b6001600160a01b031614612799576040805162461bcd60e51b81526020600482018190526024820152600080516020614143833981519152604482015290519081900360640190fd5b600e8190556040805182815233602082015281517f08bf60d0e489e33912f3ba0f81f21c6f2ad2499a36dfebfb6cfbfefcc49f3cca929181900390910190a150565b6002546001600160a01b031681565b6000546001600160a01b031690565b600d5481565b600c6020526000908152604090205481565b600061281b6140a4565b600460006128288561296e565b815260208082019290925260409081016000208151610120810183528154815260018201549381019390935260028101546001600160a01b03169183019190915260038101546060830181905260048201546080840152600582015460a0840152600682015460c0840152600782015460e08401526008909101546101008301529091504210156128f8576040805162461bcd60e51b8152602060048201526015602482015274494e56414c49445f56414c49444954595f46524f4d60581b604482015290519081900360640190fd5b4281608001511015612947576040805162461bcd60e51b8152602060048201526013602482015272494e56414c49445f56414c49444954595f544f60681b604482015290519081900360640190fd5b50600192915050565b6000908152600660205260409020600101546001600160a01b031690565b6000816129b3576040805162461bcd60e51b815260206004820152600e60248201526d155394d41150d25192515117d25160921b604482015290519081900360640190fd5b60006129be83610a22565b600090815260086020908152604080832054835260049091529020549392505050565b6129e9613e38565b6001600160a01b03166129fa6127ea565b6001600160a01b031614612a43576040805162461bcd60e51b81526020600482018190526024820152600080516020614143833981519152604482015290519081900360640190fd5b6001600160a01b038116612a94576040805162461bcd60e51b8152602060048201526013602482015272554e5350454349464945445f4144445245535360681b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040805191825233602083015280517fac81fe7dd460bb5162a4a7d8fb92a13bd2baf450914fc6b1c4cc3180eba55af09281900390910190a150565b612af6613e38565b6001600160a01b0316612b076127ea565b6001600160a01b031614612b50576040805162461bcd60e51b81526020600482018190526024820152600080516020614143833981519152604482015290519081900360640190fd5b6001600160a01b038116612ba1576040805162461bcd60e51b8152602060048201526013602482015272554e5350454349464945445f4144445245535360681b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040805191825233602083015280517fcd124a0a6c3182c7bb77b8052823a4bf7d0a4c90016ffc4d53b969f98d3f8b889281900390910190a150565b6004602081905260009182526040909120805460018201546002830154600384015494840154600585015460068601546007870154600890970154959794966001600160a01b03909416959293919290919089565b6002546001600160a01b0316612c9e576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b03163314612cef576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b6040805160608101825260ff94851681526001600160a01b0393841660208083019182529385168284019081526000978852600690945291909520945185549151841661010002610100600160a81b03199190951660ff199092169190911716929092178355905160019092018054929091166001600160a01b0319909216919091179055565b80612db9576040805162461bcd60e51b815260206004820152600e60248201526d155394d41150d25192515117d25160921b604482015290519081900360640190fd5b612dc16140a4565b60046000612dce8461296e565b815260208082019290925260409081016000208151610120810183528154815260018201549381019390935260028101546001600160a01b03169183019190915260038101546060830152600481015460808301819052600582015460a0840152600682015460c0840152600782015460e084015260089091015461010083015290915042118015612e765750600082815260096020526040902054612e769060ff16613fd7565b15612ef757600082815260096020526040902054612e989060ff166004613e2b565b600083815260096020908152604091829020805460ff191660ff94909416939093179092558051848152339281019290925280517f0fbb6c447a631ca170fad3c540d76f932db4c444d82bc160f7e3eebc6a5f67409281900390910190a15b5050565b600090815260086020908152604080832054835260049091529020600581015460068201546007909201549092565b600160ff1b81565b60015460408051627eeac760e11b81526001600160a01b038481166004830152602482018690529151600093929092169162fdd58e91604480820192602092909190829003018186803b158015612f8857600080fd5b505afa158015612f9c573d6000803e3d6000fd5b505050506040513d6020811015612fb257600080fd5b50519392505050565b6006602052600090815260409020805460019091015460ff8216916001600160a01b036101009091048116911683565b60009081526006602052604090205461010090046001600160a01b031690565b6003546001600160a01b0316613059576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6003546001600160a01b031633146130a9576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4360901b604482015290519081900360640190fd5b806130ec576040805162461bcd60e51b815260206004820152600e60248201526d155394d41150d25192515117d25160921b604482015290519081900360640190fd5b600081815260096020908152604091829020805462ff000019166201000017905581518381526001918101919091528151600080516020614183833981519152929181900390910190a150565b60096020526000908152604090208054600182015460029092015460ff8083169361010084048216936201000090049091169185565b613177613e38565b6001600160a01b03166131886127ea565b6001600160a01b0316146131d1576040805162461bcd60e51b81526020600482018190526024820152600080516020614143833981519152604482015290519081900360640190fd5b600f8190556040805182815233602082015281517fff783d200775c8efda1ff912a95c6b9561e641cc8695e015340f06a5b3024f12929181900390910190a150565b61321b613e38565b6001600160a01b031661322c6127ea565b6001600160a01b031614613275576040805162461bcd60e51b81526020600482018190526024820152600080516020614143833981519152604482015290519081900360640190fd5b6001600160a01b0381166132ba5760405162461bcd60e51b81526004018080602001828103825260268152602001806140fd6026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061416383398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600e5481565b613311610f21565b15613356576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600061336183610a22565b9050816001600160a01b031661337682610a48565b6001600160a01b0316146133c4576040805162461bcd60e51b815260206004820152601060248201526f2aa720aaaa2427a924ad22a22fa1a7a360811b604482015290519081900360640190fd5b60008381526009602052604090205460ff166133e1816002613dc7565b15613429576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d0d05390d1531190555315606a1b604482015290519081900360640190fd5b613434816001613dc7565b1561347a576040805162461bcd60e51b81526020600482015260116024820152701053149150511657d19253905312569151607a1b604482015290519081900360640190fd5b6134826140a4565b6004600061348f8761296e565b815260208082019290925260409081016000208151610120810183528154815260018201549381019390935260028101546001600160a01b0316918301919091526003810154606083015260048101546080830152600581015460a083015260068082015460c0840152600782015460e084015260089091015461010083015290915061351d908390613dc7565b8061352e575061352e826005613dc7565b156136215761353e826003613dc7565b6135be57600f54600e5460008781526009602052604090206001015401014211156135a4576040805162461bcd60e51b815260206004820152601160248201527010d3d19411549253d117d1561412549151607a1b604482015290519081900360640190fd5b60008581526009602052604090204260019091015561361c565b600f546000868152600960205260409020600201540142111561361c576040805162461bcd60e51b815260206004820152601160248201527010d3d19411549253d117d1561412549151607a1b604482015290519081900360640190fd5b613713565b61362c826004613dc7565b1561369a5761363c826003613dc7565b6135be57600f54600e5482608001510101421115613695576040805162461bcd60e51b815260206004820152601160248201527010d3d19411549253d117d1561412549151607a1b604482015290519081900360640190fd5b61361c565b6136a382613fd7565b156117ec57600f54600e54826080015101014211156136fd576040805162461bcd60e51b815260206004820152601160248201527010d3d19411549253d117d1561412549151607a1b604482015290519081900360640190fd5b6000858152600960205260409020426001909101555b61371e826002613e2b565b600086815260096020908152604091829020805460ff191660ff9490941693909317909255805187815290517f125d1de9ad96c695c95a8de033058d2c00835a1e0cbf24b7fa3de72f603c8709929181900390910190a15050505050565b600154604080516331a9108f60e11b81526004810184905290516000926001600160a01b031691636352211e916024808301926020929190829003018186803b1580156137c857600080fd5b505afa1580156137dc573d6000803e3d6000fd5b505050506040513d60208110156137f257600080fd5b505192915050565b60009081526008602090815260408083205483526004909152902060058101546007909101549091565b61382c610f21565b613874576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6138aa613e38565b604080516001600160a01b039092168252519081900360200190a1565b8261390a576040805162461bcd60e51b815260206004820152600e60248201526d155394d41150d25192515117d25160921b604482015290519081900360640190fd5b61391c816001600160a01b031661406e565b156139e957604080516301ffc9a760e01b8152630a85bd0160e11b600482015290516001600160a01b038316916301ffc9a7916024808301926020929190829003018186803b15801561396e57600080fd5b505afa158015613982573d6000803e3d6000fd5b505050506040513d602081101561399857600080fd5b50516139e9576040805162461bcd60e51b815260206004820152601b60248201527a155394d5541413d495115117d15490cdcc8c57d49150d152559151602a1b604482015290519081900360640190fd5b6001600160a01b038116613a3a576040805162461bcd60e51b8152602060048201526013602482015272554e5350454349464945445f4144445245535360681b604482015290519081900360640190fd5b60015460408051627eeac760e11b81526001600160a01b038581166004830152602482018790529151600093929092169162fdd58e91604480820192602092909190829003018186803b158015613a9057600080fd5b505afa158015613aa4573d6000803e3d6000fd5b505050506040513d6020811015613aba57600080fd5b505111613afc576040805162461bcd60e51b815260206004820152600b60248201526a4f464645525f454d50545960a81b604482015290519081900360640190fd5b600083815260086020908152604080832054808452600492839052922001544211156111ce576040805162461bcd60e51b815260206004820152600d60248201526c13d191915497d1561412549151609a1b604482015290519081900360640190fd5b6000613b73836001600160a01b031661406e565b15613c695760408051630a85bd0160e11b8082526001600160a01b0387811660048401523360248401526044830186905260806064840152600060848401819052935191939087169263150b7a029260c48083019360209383900390910190829087803b158015613be357600080fd5b505af1158015613bf7573d6000803e3d6000fd5b505050506040513d6020811015613c0d57600080fd5b50516001600160e01b03191614613c69576040805162461bcd60e51b815260206004820152601b60248201527a155394d5541413d495115117d15490cdcc8c57d49150d152559151602a1b604482015290519081900360640190fd5b6001805460408051637a94c56560e11b81526001600160a01b0388811660048301526024820187905260448201949094529051929091169163f5298aca9160648082019260009290919082900301818387803b158015613cc857600080fd5b505af1158015613cdc573d6000803e3d6000fd5b5050506000838152600c602090815260408083208054600101908190558617808452600990925290912054909150613d189060ff166007613e2b565b6000828152600960209081526040808320805460ff191660ff959095169490941762ffff00191690935560015483516340c10f1960e01b81526001600160a01b03898116600483015260248201879052945194909116936340c10f1993604480840194938390030190829087803b158015613d9257600080fd5b505af1158015613da6573d6000803e3d6000fd5b505050506040513d6020811015613dbc57600080fd5b509095945050505050565b60ff91821691161c60019081161490565b6000613df0613de960006007613e2b565b6006613e2b565b60ff168260ff16149050919050565b6000613df0613e1060006007613e2b565b6005613e2b565b6000613df0613e2860006007613e2b565b60045b600160ff919091161b1790565b3390565b600082613e86576040805162461bcd60e51b8152602060048201526013602482015272554e5350454349464945445f50524f4d49534560681b604482015290519081900360640190fd5b6000838152600460205260409020600201546001600160a01b03858116911614613ee9576040805162461bcd60e51b815260206004820152600f60248201526e554e415554484f52495a45445f434f60881b604482015290519081900360640190fd5b60008211613f31576040805162461bcd60e51b815260206004820152601060248201526f494e56414c49445f5155414e5449545960801b604482015290519081900360640190fd5b6000613f3d6001614074565b600081815260086020526040808220879055600154815163731133e960e01b81526001600160a01b038a8116600483015260248201869052604482018990526080606483015260848201859052925194955091169263731133e99260c48084019391929182900301818387803b158015613fb657600080fd5b505af1158015613fca573d6000803e3d6000fd5b5092979650505050505050565b6000613df060006007613e2b565b613fed610f21565b15614032576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586138aa613e38565b3b151590565b600d8054600101905560008115614099576080600d54901b600160ff1b179050610a2e565b5050600d5460801b90565b604051806101200160405280600080191681526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373434f4d504c41494e504552494f445f45585049524544000000000000000000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0f570ce8ad3bc67469a0b8e53a32bba1edd0105fc668c1278225660d2291cc554a2646970667358221220c3eeb8a0d632401051ab582e5a5d223072f9785ac4c14e68e8472d4dccafa32064736f6c63430007010033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061027d5760003560e01c806316ed9e0e146102825780631af2a6a8146102b15780631cf7955d146102ce5780631f38585f1461030157806321d6f3a71461033a578063325a7a84146103425780633f4ba83a14610383578063455e42f21461038d5780634f755c3e146103b9578063590f6f68146103c15780635b479d1a146103fd5780635c975abb1461042e57806365c303bc1461043657806366db9a0914610453578063715018a61461047f57806374898e82146104875780637518fa98146104b957806375549516146104c157806375a83102146104de57806376942aed146104fb578063797f2a26146105035780637ad226dc1461054d5780637bde82f2146105795780637ed06c44146105a5578063817b3084146105ad57806381dc8119146105d35780638456cb59146105f057806388106323146105f857806388c25607146106155780638990834b146106415780638cfb578e1461065e5780638da5cb5b146106665780638f940f631461066e57806399c849b8146106765780639a0271e1146106935780639a751bbd146106b0578063bc0d753d146106cd578063bd17de40146106ea578063c099a7c414610710578063cc2f84cb14610736578063cf5c9008146107a2578063d40ffcf8146107df578063d887b4e7146107fc578063d905af5514610837578063e31a00791461083f578063e5d5f9ac1461086b578063e875a613146108b4578063ebba1b29146108d1578063ec29c17d146108ee578063ede808971461093a578063f2fde38b14610957578063f3223bed1461097d578063f5d7aa1814610985578063f75951ce146109b1578063fad4ee94146109ce575b600080fd5b61029f6004803603602081101561029857600080fd5b5035610a04565b60408051918252519081900360200190f35b61029f600480360360208110156102c757600080fd5b5035610a22565b6102eb600480360360208110156102e457600080fd5b5035610a33565b6040805160ff9092168252519081900360200190f35b61031e6004803603602081101561031757600080fd5b5035610a48565b604080516001600160a01b039092168252519081900360200190f35b61029f610a73565b61035f6004803603602081101561035857600080fd5b5035610a7e565b6040805160ff90941684529115156020840152151582820152519081900360600190f35b61038b610aa7565b005b61029f600480360360408110156103a357600080fd5b50803590602001356001600160a01b0316610b50565b61031e610daf565b61038b600480360360808110156103d757600080fd5b508035906001600160a01b03602082013581169160408101359091169060600135610dbe565b61041a6004803603602081101561041357600080fd5b5035610ee4565b604080519115158252519081900360200190f35b61041a610f21565b61038b6004803603602081101561044c57600080fd5b5035610f31565b61038b6004803603604081101561046957600080fd5b50803590602001356001600160a01b03166111d4565b61038b611836565b61038b6004803603606081101561049d57600080fd5b506001600160a01b0381351690602081013590604001356118d0565b61031e611a37565b61038b600480360360208110156104d757600080fd5b5035611a46565b61029f600480360360208110156104f457600080fd5b5035611b6f565b61029f611b81565b61029f600480360360e081101561051957600080fd5b506001600160a01b038135169060208101359060408101359060608101359060808101359060a08101359060c00135611b87565b61038b6004803603604081101561056357600080fd5b50803590602001356001600160a01b0316611f60565b61038b6004803603604081101561058f57600080fd5b50803590602001356001600160a01b0316612203565b61029f612552565b61029f600480360360208110156105c357600080fd5b50356001600160a01b031661255e565b61029f600480360360208110156105e957600080fd5b5035612570565b61038b612591565b61029f6004803603602081101561060e57600080fd5b5035612638565b61038b6004803603604081101561062b57600080fd5b50803590602001356001600160a01b031661265a565b61038b6004803603602081101561065757600080fd5b5035612737565b61031e6127db565b61031e6127ea565b61029f6127f9565b61029f6004803603602081101561068c57600080fd5b50356127ff565b61041a600480360360208110156106a957600080fd5b5035612811565b61031e600480360360208110156106c657600080fd5b5035612950565b61029f600480360360208110156106e357600080fd5b503561296e565b61038b6004803603602081101561070057600080fd5b50356001600160a01b03166129e1565b61038b6004803603602081101561072657600080fd5b50356001600160a01b0316612aee565b6107536004803603602081101561074c57600080fd5b5035612bfb565b60408051998a5260208a01989098526001600160a01b03909616888801526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b61038b600480360360808110156107b857600080fd5b5080359060ff602082013516906001600160a01b0360408201358116916060013516612c50565b61038b600480360360208110156107f557600080fd5b5035612d76565b6108196004803603602081101561081257600080fd5b5035612efb565b60408051938452602084019290925282820152519081900360600190f35b61029f612f2a565b61029f6004803603604081101561085557600080fd5b50803590602001356001600160a01b0316612f32565b6108886004803603602081101561088157600080fd5b5035612fbb565b6040805160ff90941684526001600160a01b039283166020850152911682820152519081900360600190f35b61031e600480360360208110156108ca57600080fd5b5035612feb565b61038b600480360360208110156108e757600080fd5b503561300b565b61090b6004803603602081101561090457600080fd5b5035613139565b6040805160ff909616865293151560208601529115158484015260608401526080830152519081900360a00190f35b61038b6004803603602081101561095057600080fd5b503561316f565b61038b6004803603602081101561096d57600080fd5b50356001600160a01b0316613213565b61029f613303565b61038b6004803603604081101561099b57600080fd5b50803590602001356001600160a01b0316613309565b61031e600480360360208110156109c757600080fd5b503561377c565b6109eb600480360360208110156109e457600080fd5b50356137fa565b6040805192835260208301919091528051918290030190f35b60078181548110610a1157fe5b600091825260209091200154905081565b6001600160801b031981165b919050565b60009081526006602052604090205460ff1690565b600090815260086020908152604080832054835260049091529020600201546001600160a01b031690565b6001600160801b0381565b60009081526009602052604090205460ff80821692610100830482169262010000900490911690565b6002546001600160a01b0316610af5576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b03163314610b46576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b610b4e613824565b565b6002546000906001600160a01b0316610ba1576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b03163314610bf2576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b610bfa610f21565b15610c3f576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b816001600160a01b0316610c5284610a48565b6001600160a01b031614610ca0576040805162461bcd60e51b815260206004820152601060248201526f2aa720aaaa2427a924ad22a22fa1a7a360811b604482015290519081900360640190fd5b6000610cac8484612f32565b905060008111610cf1576040805162461bcd60e51b815260206004820152600b60248201526a4f464645525f454d50545960a81b604482015290519081900360640190fd5b60015460408051637a94c56560e11b81526001600160a01b03868116600483015260248201889052604482018590529151919092169163f5298aca91606480830192600092919082900301818387803b158015610d4d57600080fd5b505af1158015610d61573d6000803e3d6000fd5b5050604080518781526001600160a01b038716602082015281517fd771b32487969df897bdfc40b573cff1c37f81bc0e62b60cacc027d0efd6d33f9450908190039091019150a19392505050565b6003546001600160a01b031681565b6002546001600160a01b0316610e0c576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b03163314610e5d576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b610e688484846138c7565b6000610e75848487613b5f565b9050847fce3b32c0b6a7ffab6dec7497bc73336faeb8e1b3b0b8dc7099699a3595f000a6828686610ea58661296e565b604080519485526001600160a01b0393841660208601529190921683820152606083019190915260808201869052519081900360a00190a25050505050565b600081815260096020526040812054610100900460ff1680610f1a575060008281526009602052604090205462010000900460ff165b1592915050565b600054600160a01b900460ff1690565b80610f74576040805162461bcd60e51b815260206004820152600e60248201526d155394d41150d25192515117d25160921b604482015290519081900360640190fd5b60008181526009602052604090205460ff16610f91816001613dc7565b15610fd7576040805162461bcd60e51b81526020600482015260116024820152701053149150511657d19253905312569151607a1b604482015290519081900360640190fd5b6000610fe16140a4565b60046000610fee8661296e565b815260208082019290925260409081016000208151610120810183528154815260018201549381019390935260028101546001600160a01b031691830191909152600380820154606084015260048201546080840152600582015460a0840152600682015460c0840152600782015460e084015260089091015461010083015290915061107c908490613dc7565b156110c05761108c836002613dc7565b1561109a57600191506110bb565b600f546000858152600960205260409020600201540142106110bb57600191505b61115e565b6110cb836002613dc7565b80156110ec5750600e54600085815260096020526040902060010154014210155b156110fa576001915061115e565b61110383613dd8565b80611112575061111283613dff565b1561113c57600e546000858152600960205260409020600101540142106110bb576001915061115e565b61114583613e17565b1561115e57600e54816080015101421061115e57600191505b81156111ce5761116f836001613e2b565b600085815260096020908152604091829020805460ff191660ff94909416939093179092558051868152339281019290925280517f28c953c622aa90e006382693080fb83e2add147a386446e0f24572c6b071adfa9281900390910190a15b50505050565b6111dc610f21565b15611221576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002546001600160a01b031661126f576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b031633146112c0576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b600154604080516331a9108f60e11b8152600481018590529051849284926001600160a01b0380851693921691636352211e91602480820192602092909190829003018186803b15801561131357600080fd5b505afa158015611327573d6000803e3d6000fd5b505050506040513d602081101561133d57600080fd5b50516001600160a01b03161461138b576040805162461bcd60e51b815260206004820152600e60248201526d2aa720aaaa2427a924ad22a22fab60911b604482015290519081900360640190fd5b6000848152600960205260409020546113a89060ff166003613dc7565b156113ef576040805162461bcd60e51b81526020600482015260126024820152711053149150511657d0d3d35413105253915160721b604482015290519081900360640190fd5b60008481526009602052604090205461140c9060ff166001613dc7565b15611452576040805162461bcd60e51b81526020600482015260116024820152701053149150511657d19253905312569151607a1b604482015290519081900360640190fd5b61145a6140a4565b600460006114678761296e565b8152602080820192909252604090810160009081208251610120810184528154815260018201548186015260028201546001600160a01b0316818501526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152888252600990935220549091506114fb9060ff16613dd8565b8061151c575060008581526009602052604090205461151c9060ff16613dff565b1561167a5760008581526009602052604090205461153e9060ff166002613dc7565b6115a357600f54600e54600087815260096020526040902060010154010142111561159e576040805162461bcd60e51b81526020600482015260166024820152600080516020614123833981519152604482015290519081900360640190fd5b6115fb565b600e54600086815260096020526040902060010154014211156115fb576040805162461bcd60e51b81526020600482015260166024820152600080516020614123833981519152604482015290519081900360640190fd5b60008581526009602052604090204260028201555461161e9060ff166003613e2b565b600086815260096020908152604091829020805460ff191660ff9490941693909317909255805187815290517f0411cc6d1d8430de89b9f9fdd063617e55946cddb8538d3407f516882db59455929181900390910190a161182f565b6000858152600960205260409020546116959060ff16613e17565b15611755576000858152600960205260409020546116b79060ff166002613dc7565b61170a57600f54600e548260800151010142111561159e576040805162461bcd60e51b81526020600482015260166024820152600080516020614123833981519152604482015290519081900360640190fd5b600e548160800151014211156115fb576040805162461bcd60e51b81526020600482015260166024820152600080516020614123833981519152604482015290519081900360640190fd5b6000858152600960205260409020546117729060ff166002613dc7565b156117ec57600e54600086815260096020526040902060010154014211156117cf576040805162461bcd60e51b81526020600482015260166024820152600080516020614123833981519152604482015290519081900360640190fd5b60008581526009602052604090205461161e9060ff166003613e2b565b6040805162461bcd60e51b8152602060048201526013602482015272494e4150504c494341424c455f53544154555360681b604482015290519081900360640190fd5b5050505050565b61183e613e38565b6001600160a01b031661184f6127ea565b6001600160a01b031614611898576040805162461bcd60e51b81526020600482018190526024820152600080516020614143833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020614163833981519152908390a3600080546001600160a01b0319169055565b6118d8610f21565b611920576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6003546001600160a01b031661196e576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6003546001600160a01b031633146119be576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4360901b604482015290519081900360640190fd5b60015460408051637a94c56560e11b81526001600160a01b03868116600483015260248201869052604482018590529151919092169163f5298aca91606480830192600092919082900301818387803b158015611a1a57600080fd5b505af1158015611a2e573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b031681565b6003546001600160a01b0316611a94576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6003546001600160a01b03163314611ae4576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4360901b604482015290519081900360640190fd5b80611b27576040805162461bcd60e51b815260206004820152600e60248201526d155394d41150d25192515117d25160921b604482015290519081900360640190fd5b6000818152600960209081526040808320805461ff0019166101001790558051848152918201929092528151600080516020614183833981519152929181900390910190a150565b60086020526000908152604090205481565b600f5481565b6002546000906001600160a01b0316611bd8576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b03163314611c29576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b85871115611c76576040805162461bcd60e51b8152602060048201526015602482015274494e56414c49445f56414c49444954595f46524f4d60581b604482015290519081900360640190fd5b4261012c01861015611cc5576040805162461bcd60e51b8152602060048201526013602482015272494e56414c49445f56414c49444954595f544f60681b604482015290519081900360640190fd5b6001600160a01b0388166000908152600560209081526040918290208054600181019091558251808301919091528083018a905260608082018a9052835180830390910181526080909101909252815191012060075415611d9857600081815260046020526040902060080154600780548392908110611d4157fe5b90600052602060002001541415611d98576040805162461bcd60e51b815260206004820152601660248201527550524f4d4953455f414c52454144595f45584953545360501b604482015290519081900360640190fd5b604051806101200160405280828152602001600560008c6001600160a01b03166001600160a01b031681526020019081526020016000205481526020018a6001600160a01b0316815260200189815260200188815260200187815260200186815260200185815260200160078054905081525060046000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801559050506007819080600181540180825580915050600190039060005260206000200160009091909190915055886001600160a01b0316600560008b6001600160a01b03166001600160a01b0316815260200190815260200160002054827fc05e9e3de4c67624681fddccb848a2f81797e05e1c09faf702ed3c526a6660e08b8b60016007805490500360405180848152602001838152602001828152602001935050505060405180910390a4611f53898285613e3c565b9998505050505050505050565b611f68610f21565b15611fad576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002546001600160a01b0316611ffb576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b0316331461204c576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b600154604080516331a9108f60e11b8152600481018590529051849284926001600160a01b0380851693921691636352211e91602480820192602092909190829003018186803b15801561209f57600080fd5b505afa1580156120b3573d6000803e3d6000fd5b505050506040513d60208110156120c957600080fd5b50516001600160a01b031614612117576040805162461bcd60e51b815260206004820152600e60248201526d2aa720aaaa2427a924ad22a22fab60911b604482015290519081900360640190fd5b6000848152600960205260409020546121329060ff16613fd7565b612179576040805162461bcd60e51b8152602060048201526013602482015272494e4150504c494341424c455f53544154555360681b604482015290519081900360640190fd5b61218284612811565b506000848152600960205260409020426001820155546121a69060ff166005613e2b565b600085815260096020908152604091829020805460ff191660ff9490941693909317909255805186815290517f66d163993c35c8d3a90f3fbce008096384de89ec441c60c9b9f79aaad36616ff929181900390910190a150505050565b61220b610f21565b15612250576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002546001600160a01b031661229e576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b031633146122ef576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b600154604080516331a9108f60e11b8152600481018590529051849284926001600160a01b0380851693921691636352211e91602480820192602092909190829003018186803b15801561234257600080fd5b505afa158015612356573d6000803e3d6000fd5b505050506040513d602081101561236c57600080fd5b50516001600160a01b0316146123ba576040805162461bcd60e51b815260206004820152600e60248201526d2aa720aaaa2427a924ad22a22fab60911b604482015290519081900360640190fd5b6000848152600960205260409020546123d59060ff16613fd7565b61241a576040805162461bcd60e51b81526020600482015260116024820152701053149150511657d41493d0d154d4d151607a1b604482015290519081900360640190fd5b61242384612811565b5061242c6140a4565b600460006124398761296e565b815260208082019290925260409081016000908120825161012081018452815481526001808301548287015260028301546001600160a01b0316828601526003830154606083015260048301546080830152600583015460a083015260068084015460c0840152600784015460e08401526008909301546101008301528a8452600990955292909120429381019390935591549092506124de9160ff90911690613e2b565b600086815260096020908152604091829020805460ff191660ff9490941693909317909255825181518881526001600160a01b0388169381019390935282820152517f43a88bfc6f85aab9491c25f0ce50c4046d7cb7d4dc209b40914a2574d9855a5c916060908290030190a15050505050565b6001600160801b031981565b60056020526000908152604090205481565b60006007828154811061257f57fe5b90600052602060002001549050919050565b6002546001600160a01b03166125df576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b03163314612630576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b610b4e613fe5565b6000908152600860209081526040808320548352600490915290206006015490565b6002546001600160a01b03166126a8576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b031633146126f9576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b6000918252600860209081526040808420548452600490915290912060020180546001600160a01b0319166001600160a01b03909216919091179055565b61273f613e38565b6001600160a01b03166127506127ea565b6001600160a01b031614612799576040805162461bcd60e51b81526020600482018190526024820152600080516020614143833981519152604482015290519081900360640190fd5b600e8190556040805182815233602082015281517f08bf60d0e489e33912f3ba0f81f21c6f2ad2499a36dfebfb6cfbfefcc49f3cca929181900390910190a150565b6002546001600160a01b031681565b6000546001600160a01b031690565b600d5481565b600c6020526000908152604090205481565b600061281b6140a4565b600460006128288561296e565b815260208082019290925260409081016000208151610120810183528154815260018201549381019390935260028101546001600160a01b03169183019190915260038101546060830181905260048201546080840152600582015460a0840152600682015460c0840152600782015460e08401526008909101546101008301529091504210156128f8576040805162461bcd60e51b8152602060048201526015602482015274494e56414c49445f56414c49444954595f46524f4d60581b604482015290519081900360640190fd5b4281608001511015612947576040805162461bcd60e51b8152602060048201526013602482015272494e56414c49445f56414c49444954595f544f60681b604482015290519081900360640190fd5b50600192915050565b6000908152600660205260409020600101546001600160a01b031690565b6000816129b3576040805162461bcd60e51b815260206004820152600e60248201526d155394d41150d25192515117d25160921b604482015290519081900360640190fd5b60006129be83610a22565b600090815260086020908152604080832054835260049091529020549392505050565b6129e9613e38565b6001600160a01b03166129fa6127ea565b6001600160a01b031614612a43576040805162461bcd60e51b81526020600482018190526024820152600080516020614143833981519152604482015290519081900360640190fd5b6001600160a01b038116612a94576040805162461bcd60e51b8152602060048201526013602482015272554e5350454349464945445f4144445245535360681b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040805191825233602083015280517fac81fe7dd460bb5162a4a7d8fb92a13bd2baf450914fc6b1c4cc3180eba55af09281900390910190a150565b612af6613e38565b6001600160a01b0316612b076127ea565b6001600160a01b031614612b50576040805162461bcd60e51b81526020600482018190526024820152600080516020614143833981519152604482015290519081900360640190fd5b6001600160a01b038116612ba1576040805162461bcd60e51b8152602060048201526013602482015272554e5350454349464945445f4144445245535360681b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040805191825233602083015280517fcd124a0a6c3182c7bb77b8052823a4bf7d0a4c90016ffc4d53b969f98d3f8b889281900390910190a150565b6004602081905260009182526040909120805460018201546002830154600384015494840154600585015460068601546007870154600890970154959794966001600160a01b03909416959293919290919089565b6002546001600160a01b0316612c9e576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6002546001600160a01b03163314612cef576040805162461bcd60e51b815260206004820152600f60248201526e2aa720aaaa2427a924ad22a22fa12960891b604482015290519081900360640190fd5b6040805160608101825260ff94851681526001600160a01b0393841660208083019182529385168284019081526000978852600690945291909520945185549151841661010002610100600160a81b03199190951660ff199092169190911716929092178355905160019092018054929091166001600160a01b0319909216919091179055565b80612db9576040805162461bcd60e51b815260206004820152600e60248201526d155394d41150d25192515117d25160921b604482015290519081900360640190fd5b612dc16140a4565b60046000612dce8461296e565b815260208082019290925260409081016000208151610120810183528154815260018201549381019390935260028101546001600160a01b03169183019190915260038101546060830152600481015460808301819052600582015460a0840152600682015460c0840152600782015460e084015260089091015461010083015290915042118015612e765750600082815260096020526040902054612e769060ff16613fd7565b15612ef757600082815260096020526040902054612e989060ff166004613e2b565b600083815260096020908152604091829020805460ff191660ff94909416939093179092558051848152339281019290925280517f0fbb6c447a631ca170fad3c540d76f932db4c444d82bc160f7e3eebc6a5f67409281900390910190a15b5050565b600090815260086020908152604080832054835260049091529020600581015460068201546007909201549092565b600160ff1b81565b60015460408051627eeac760e11b81526001600160a01b038481166004830152602482018690529151600093929092169162fdd58e91604480820192602092909190829003018186803b158015612f8857600080fd5b505afa158015612f9c573d6000803e3d6000fd5b505050506040513d6020811015612fb257600080fd5b50519392505050565b6006602052600090815260409020805460019091015460ff8216916001600160a01b036101009091048116911683565b60009081526006602052604090205461010090046001600160a01b031690565b6003546001600160a01b0316613059576040805162461bcd60e51b815260206004820152600e60248201526d2aa729a822a1a4a324a2a22fa12960911b604482015290519081900360640190fd5b6003546001600160a01b031633146130a9576040805162461bcd60e51b815260206004820152600e60248201526d554e415554484f52495a45445f4360901b604482015290519081900360640190fd5b806130ec576040805162461bcd60e51b815260206004820152600e60248201526d155394d41150d25192515117d25160921b604482015290519081900360640190fd5b600081815260096020908152604091829020805462ff000019166201000017905581518381526001918101919091528151600080516020614183833981519152929181900390910190a150565b60096020526000908152604090208054600182015460029092015460ff8083169361010084048216936201000090049091169185565b613177613e38565b6001600160a01b03166131886127ea565b6001600160a01b0316146131d1576040805162461bcd60e51b81526020600482018190526024820152600080516020614143833981519152604482015290519081900360640190fd5b600f8190556040805182815233602082015281517fff783d200775c8efda1ff912a95c6b9561e641cc8695e015340f06a5b3024f12929181900390910190a150565b61321b613e38565b6001600160a01b031661322c6127ea565b6001600160a01b031614613275576040805162461bcd60e51b81526020600482018190526024820152600080516020614143833981519152604482015290519081900360640190fd5b6001600160a01b0381166132ba5760405162461bcd60e51b81526004018080602001828103825260268152602001806140fd6026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061416383398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600e5481565b613311610f21565b15613356576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600061336183610a22565b9050816001600160a01b031661337682610a48565b6001600160a01b0316146133c4576040805162461bcd60e51b815260206004820152601060248201526f2aa720aaaa2427a924ad22a22fa1a7a360811b604482015290519081900360640190fd5b60008381526009602052604090205460ff166133e1816002613dc7565b15613429576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d0d05390d1531190555315606a1b604482015290519081900360640190fd5b613434816001613dc7565b1561347a576040805162461bcd60e51b81526020600482015260116024820152701053149150511657d19253905312569151607a1b604482015290519081900360640190fd5b6134826140a4565b6004600061348f8761296e565b815260208082019290925260409081016000208151610120810183528154815260018201549381019390935260028101546001600160a01b0316918301919091526003810154606083015260048101546080830152600581015460a083015260068082015460c0840152600782015460e084015260089091015461010083015290915061351d908390613dc7565b8061352e575061352e826005613dc7565b156136215761353e826003613dc7565b6135be57600f54600e5460008781526009602052604090206001015401014211156135a4576040805162461bcd60e51b815260206004820152601160248201527010d3d19411549253d117d1561412549151607a1b604482015290519081900360640190fd5b60008581526009602052604090204260019091015561361c565b600f546000868152600960205260409020600201540142111561361c576040805162461bcd60e51b815260206004820152601160248201527010d3d19411549253d117d1561412549151607a1b604482015290519081900360640190fd5b613713565b61362c826004613dc7565b1561369a5761363c826003613dc7565b6135be57600f54600e5482608001510101421115613695576040805162461bcd60e51b815260206004820152601160248201527010d3d19411549253d117d1561412549151607a1b604482015290519081900360640190fd5b61361c565b6136a382613fd7565b156117ec57600f54600e54826080015101014211156136fd576040805162461bcd60e51b815260206004820152601160248201527010d3d19411549253d117d1561412549151607a1b604482015290519081900360640190fd5b6000858152600960205260409020426001909101555b61371e826002613e2b565b600086815260096020908152604091829020805460ff191660ff9490941693909317909255805187815290517f125d1de9ad96c695c95a8de033058d2c00835a1e0cbf24b7fa3de72f603c8709929181900390910190a15050505050565b600154604080516331a9108f60e11b81526004810184905290516000926001600160a01b031691636352211e916024808301926020929190829003018186803b1580156137c857600080fd5b505afa1580156137dc573d6000803e3d6000fd5b505050506040513d60208110156137f257600080fd5b505192915050565b60009081526008602090815260408083205483526004909152902060058101546007909101549091565b61382c610f21565b613874576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6138aa613e38565b604080516001600160a01b039092168252519081900360200190a1565b8261390a576040805162461bcd60e51b815260206004820152600e60248201526d155394d41150d25192515117d25160921b604482015290519081900360640190fd5b61391c816001600160a01b031661406e565b156139e957604080516301ffc9a760e01b8152630a85bd0160e11b600482015290516001600160a01b038316916301ffc9a7916024808301926020929190829003018186803b15801561396e57600080fd5b505afa158015613982573d6000803e3d6000fd5b505050506040513d602081101561399857600080fd5b50516139e9576040805162461bcd60e51b815260206004820152601b60248201527a155394d5541413d495115117d15490cdcc8c57d49150d152559151602a1b604482015290519081900360640190fd5b6001600160a01b038116613a3a576040805162461bcd60e51b8152602060048201526013602482015272554e5350454349464945445f4144445245535360681b604482015290519081900360640190fd5b60015460408051627eeac760e11b81526001600160a01b038581166004830152602482018790529151600093929092169162fdd58e91604480820192602092909190829003018186803b158015613a9057600080fd5b505afa158015613aa4573d6000803e3d6000fd5b505050506040513d6020811015613aba57600080fd5b505111613afc576040805162461bcd60e51b815260206004820152600b60248201526a4f464645525f454d50545960a81b604482015290519081900360640190fd5b600083815260086020908152604080832054808452600492839052922001544211156111ce576040805162461bcd60e51b815260206004820152600d60248201526c13d191915497d1561412549151609a1b604482015290519081900360640190fd5b6000613b73836001600160a01b031661406e565b15613c695760408051630a85bd0160e11b8082526001600160a01b0387811660048401523360248401526044830186905260806064840152600060848401819052935191939087169263150b7a029260c48083019360209383900390910190829087803b158015613be357600080fd5b505af1158015613bf7573d6000803e3d6000fd5b505050506040513d6020811015613c0d57600080fd5b50516001600160e01b03191614613c69576040805162461bcd60e51b815260206004820152601b60248201527a155394d5541413d495115117d15490cdcc8c57d49150d152559151602a1b604482015290519081900360640190fd5b6001805460408051637a94c56560e11b81526001600160a01b0388811660048301526024820187905260448201949094529051929091169163f5298aca9160648082019260009290919082900301818387803b158015613cc857600080fd5b505af1158015613cdc573d6000803e3d6000fd5b5050506000838152600c602090815260408083208054600101908190558617808452600990925290912054909150613d189060ff166007613e2b565b6000828152600960209081526040808320805460ff191660ff959095169490941762ffff00191690935560015483516340c10f1960e01b81526001600160a01b03898116600483015260248201879052945194909116936340c10f1993604480840194938390030190829087803b158015613d9257600080fd5b505af1158015613da6573d6000803e3d6000fd5b505050506040513d6020811015613dbc57600080fd5b509095945050505050565b60ff91821691161c60019081161490565b6000613df0613de960006007613e2b565b6006613e2b565b60ff168260ff16149050919050565b6000613df0613e1060006007613e2b565b6005613e2b565b6000613df0613e2860006007613e2b565b60045b600160ff919091161b1790565b3390565b600082613e86576040805162461bcd60e51b8152602060048201526013602482015272554e5350454349464945445f50524f4d49534560681b604482015290519081900360640190fd5b6000838152600460205260409020600201546001600160a01b03858116911614613ee9576040805162461bcd60e51b815260206004820152600f60248201526e554e415554484f52495a45445f434f60881b604482015290519081900360640190fd5b60008211613f31576040805162461bcd60e51b815260206004820152601060248201526f494e56414c49445f5155414e5449545960801b604482015290519081900360640190fd5b6000613f3d6001614074565b600081815260086020526040808220879055600154815163731133e960e01b81526001600160a01b038a8116600483015260248201869052604482018990526080606483015260848201859052925194955091169263731133e99260c48084019391929182900301818387803b158015613fb657600080fd5b505af1158015613fca573d6000803e3d6000fd5b5092979650505050505050565b6000613df060006007613e2b565b613fed610f21565b15614032576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586138aa613e38565b3b151590565b600d8054600101905560008115614099576080600d54901b600160ff1b179050610a2e565b5050600d5460801b90565b604051806101200160405280600080191681526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373434f4d504c41494e504552494f445f45585049524544000000000000000000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0f570ce8ad3bc67469a0b8e53a32bba1edd0105fc668c1278225660d2291cc554a2646970667358221220c3eeb8a0d632401051ab582e5a5d223072f9785ac4c14e68e8472d4dccafa32064736f6c63430007010033",
  "immutableReferences": {},
  "sourceMap": "1169:43626:6:-:0;;;7714:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7714:169:6;867:17:21;887:12;:10;:12::i;:::-;909:6;:18;;-1:-1:-1;;;;;;909:18:21;-1:-1:-1;;;;;909:18:21;;;;;;;942:43;;909:18;;-1:-1:-1;909:18:21;942:43;;909:6;;942:43;-1:-1:-1;928:5:28;918:15;;-1:-1:-1;;;;918:15:28;;;-1:-1:-1;7762:32:6;;-1:-1:-1;;;;;;7762:32:6;-1:-1:-1;;;;;7762:32:6;;;;;;;;;;7824:10;7807:14;:27;;;7845:17;:30;1169:43626;;598:104:26;685:10;598:104;:::o;1169:43626:6:-;;;;;;;",
  "deployedSourceMap": "1169:43626:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2612:28;;;;;;;;;;;;;;;;-1:-1:-1;2612:28:6;;:::i;:::-;;;;;;;;;;;;;;;;37779:190;;;;;;;;;;;;;;;;-1:-1:-1;37779:190:6;;:::i;43275:205::-;;;;;;;;;;;;;;;;-1:-1:-1;43275:205:6;;:::i;:::-;;;;;;;;;;;;;;;;;;;41945:243;;;;;;;;;;;;;;;;-1:-1:-1;41945:243:6;;:::i;:::-;;;;-1:-1:-1;;;;;41945:243:6;;;;;;;;;;;;;;3613:51;;;:::i;40926:410::-;;;;;;;;;;;;;;;;-1:-1:-1;40926:410:6;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8304:81;;;:::i;:::-;;29473:573;;;;;;;;;;;;;;;;-1:-1:-1;29473:573:6;;;;;;-1:-1:-1;;;;;29473:573:6;;:::i;2146:29::-;;;:::i;13314:606::-;;;;;;;;;;;;;;;;-1:-1:-1;13314:606:6;;;-1:-1:-1;;;;;13314:606:6;;;;;;;;;;;;;;;;;;;:::i;44530:262::-;;;;;;;;;;;;;;;;-1:-1:-1;44530:262:6;;:::i;:::-;;;;;;;;;;;;;;;;;;1035:84:28;;;:::i;32220:2255:6:-;;;;;;;;;;;;;;;;-1:-1:-1;32220:2255:6;;:::i;21064:4338::-;;;;;;;;;;;;;;;;-1:-1:-1;21064:4338:6;;;;;;-1:-1:-1;;;;;21064:4338:6;;:::i;1700:145:21:-;;;:::i;17573:246:6:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17573:246:6;;;;;;;;;;;;;:::i;1353:29::-;;;:::i;30279:396::-;;;;;;;;;;;;;;;;-1:-1:-1;30279:396:6;;:::i;2649:48::-;;;;;;;;;;;;;;;;-1:-1:-1;2649:48:6;;:::i;5088:32::-;;;:::i;8844:1731::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8844:1731:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20059:810::-;;;;;;;;;;;;;;;;-1:-1:-1;20059:810:6;;;;;;-1:-1:-1;;;;;20059:810:6;;:::i;18792:1002::-;;;;;;;;;;;;;;;;-1:-1:-1;18792:1002:6;;;;;;-1:-1:-1;;;;;18792:1002:6;;:::i;3239:63::-;;;:::i;2308:46::-;;;;;;;;;;;;;;;;-1:-1:-1;2308:46:6;-1:-1:-1;;;;;2308:46:6;;:::i;37419:160::-;;;;;;;;;;;;;;;;-1:-1:-1;37419:160:6;;:::i;8065:77::-;;;:::i;40478:247::-;;;;;;;;;;;;;;;;-1:-1:-1;40478:247:6;;:::i;34811:257::-;;;;;;;;;;;;;;;;-1:-1:-1;34811:257:6;;;;;;-1:-1:-1;;;;;34811:257:6;;:::i;36415:234::-;;;;;;;;;;;;;;;;-1:-1:-1;36415:234:6;;:::i;2067:33::-;;;:::i;1068:85:21:-;;;:::i;4342:21:6:-;;;:::i;3140:47::-;;;;;;;;;;;;;;;;-1:-1:-1;3140:47:6;;:::i;43670:623::-;;;;;;;;;;;;;;;;-1:-1:-1;43670:623:6;;:::i;42854:213::-;;;;;;;;;;;;;;;;-1:-1:-1;42854:213:6;;:::i;38159:438::-;;;;;;;;;;;;;;;;-1:-1:-1;38159:438:6;;:::i;35223:397::-;;;;;;;;;;;;;;;;-1:-1:-1;35223:397:6;-1:-1:-1;;;;;35223:397:6;;:::i;35766:387::-;;;;;;;;;;;;;;;;-1:-1:-1;35766:387:6;-1:-1:-1;;;;;35766:387:6;;:::i;2218:43::-;;;;;;;;;;;;;;;;-1:-1:-1;2218:43:6;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;2218:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11117:421;;;;;;;;;;;;;;;;-1:-1:-1;11117:421:6;;;;;;;;;;-1:-1:-1;;;;;11117:421:6;;;;;;;;;;;;:::i;31352:730::-;;;;;;;;;;;;;;;;-1:-1:-1;31352:730:6;;:::i;39352:424::-;;;;;;;;;;;;;;;;-1:-1:-1;39352:424:6;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;3984:46;;;:::i;38879:232::-;;;;;;;;;;;;;;;;-1:-1:-1;38879:232:6;;;;;;-1:-1:-1;;;;;38879:232:6;;:::i;2500:62::-;;;;;;;;;;;;;;;;-1:-1:-1;2500:62:6;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;2500:62:6;;;;;;;;;;;;;;;;;;;;;;42415:208;;;;;;;;;;;;;;;;-1:-1:-1;42415:208:6;;:::i;30825:398::-;;;;;;;;;;;;;;;;-1:-1:-1;30825:398:6;;:::i;2780:55::-;;;;;;;;;;;;;;;;-1:-1:-1;2780:55:6;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36924:252;;;;;;;;;;;;;;;;-1:-1:-1;36924:252:6;;:::i;1994:240:21:-;;;;;;;;;;;;;;;;-1:-1:-1;1994:240:21;-1:-1:-1;;;;;1994:240:21;;:::i;5052:29:6:-;;;:::i;25583:3567::-;;;;;;;;;;;;;;;;-1:-1:-1;25583:3567:6;;;;;;-1:-1:-1;;;;;25583:3567:6;;:::i;41518:205::-;;;;;;;;;;;;;;;;-1:-1:-1;41518:205:6;;:::i;40017:288::-;;;;;;;;;;;;;;;;-1:-1:-1;40017:288:6;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2612:28;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2612:28:6;:::o;37779:190::-;-1:-1:-1;;;;;;37934:27:6;;37779:190;;;;:::o;43275:205::-;43398:5;43428:30;;;:14;:30;;;;;:44;;;;43275:205::o;41945:243::-;42060:7;42106:29;;;:13;:29;;;;;;;;;42153:20;;:8;:20;;;;;:27;;;-1:-1:-1;;;;;42153:27:6;;41945:243::o;3613:51::-;-1:-1:-1;;;;;3613:51:6;:::o;40926:410::-;41057:5;41150:31;;;:14;:31;;;;;:38;;;;;;;41203:49;;;;;41267:50;;;;;;;40926:410::o;8304:81::-;6684:18;;-1:-1:-1;;;;;6684:18:6;6676:59;;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;;;;6858:18;;-1:-1:-1;;;;;6858:18:6;6844:10;:32;6836:60;;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;;;;8367:10:::1;:8;:10::i;:::-;8304:81::o:0;29473:573::-;6684:18;;29648:7;;-1:-1:-1;;;;;6684:18:6;6676:59;;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;;;;6858:18;;-1:-1:-1;;;;;6858:18:6;6844:10;:32;6836:60;;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;;;;1349:8:28::1;:6;:8::i;:::-;1348:9;1340:38;;;::::0;;-1:-1:-1;;;1340:38:28;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;1340:38:28;;;;;;;;;;;;;::::1;;29716:7:6::2;-1:-1:-1::0;;;;;29681:42:6::2;:31;29697:14;29681:15;:31::i;:::-;-1:-1:-1::0;;;;;29681:42:6::2;;29673:71;;;::::0;;-1:-1:-1;;;29673:71:6;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;29673:71:6;;;;;;;;;;;;;::::2;;29757:14;29774:43;29793:14;29809:7;29774:18;:43::i;:::-;29757:60;;29847:1;29838:6;:10;29830:34;;;::::0;;-1:-1:-1;;;29830:34:6;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;29830:34:6;;;;;;;;;;;;;::::2;;29892:14;::::0;29877:68:::2;::::0;;-1:-1:-1;;;29877:68:6;;-1:-1:-1;;;;;29877:68:6;;::::2;;::::0;::::2;::::0;;;;;;;;;;;;;;;29892:14;;;::::2;::::0;29877:35:::2;::::0;:68;;;;;29892:14:::2;::::0;29877:68;;;;;;;29892:14;;29877:68;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;29963:49:6::2;::::0;;;;;-1:-1:-1;;;;;29963:49:6;::::2;;::::0;::::2;::::0;;;::::2;::::0;-1:-1:-1;29963:49:6;;;;;;;;-1:-1:-1;29963:49:6::2;30032:6:::0;29473:573;-1:-1:-1;;;29473:573:6:o;2146:29::-;;;-1:-1:-1;;;;;2146:29:6;;:::o;13314:606::-;6684:18;;-1:-1:-1;;;;;6684:18:6;6676:59;;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;;;;6858:18;;-1:-1:-1;;;;;6858:18:6;6844:10;:32;6836:60;;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;;;;13520:52:::1;13539:14;13555:7;13564;13520:18;:52::i;:::-;13608:22;13633:44;13644:7;13653;13662:14;13633:10;:44::i;:::-;13608:69;;13729:14;13695:217;13758:14;13787:7;13809;13831:41;13857:14;13831:25;:41::i;:::-;13695:217;::::0;;;;;-1:-1:-1;;;;;13695:217:6;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;::::1;6991:1;13314:606:::0;;;;:::o;44530:262::-;44616:4;44656:31;;;:14;:31;;;;;:49;;;;;;;:117;;-1:-1:-1;44723:31:6;;;;:14;:31;;;;;:50;;;;;;44656:117;44640:144;;44530:262;-1:-1:-1;;44530:262:6:o;1035:84:28:-;1082:4;1105:7;-1:-1:-1;;;1105:7:28;;;;;1035:84::o;32220:2255:6:-;32314:20;32306:47;;;;;-1:-1:-1;;;32306:47:6;;;;;;;;;;;;-1:-1:-1;;;32306:47:6;;;;;;;;;;;;;;;32456:13;32472:31;;;:14;:31;;;;;:38;;;32532:28;32472:38;;32532:8;:28::i;:::-;32531:29;32523:59;;;;;-1:-1:-1;;;32523:59:6;;;;;;;;;;;;-1:-1:-1;;;32523:59:6;;;;;;;;;;;;;;;32677:9;32697:23;;:::i;:::-;32736:8;:52;32745:42;32771:15;32745:25;:42::i;:::-;32736:52;;;;;;;;;;;;;;-1:-1:-1;32736:52:6;32697:91;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32697:91:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32805:31:6;;32814:7;;32805:8;:31::i;:::-;32801:1432;;;32857:35;32866:7;488:1:5;32857:8:6;:35::i;:::-;32853:418;;;32970:4;32963:11;;32853:418;;;33132:17;;33054:31;;;;:14;:31;;;;;:54;;;:95;33018:15;:131;32996:275;;33251:4;33244:11;;32996:275;32801:1432;;;33306:35;33315:7;488:1:5;33306:8:6;:35::i;:::-;:152;;;;-1:-1:-1;33444:14:6;;33390:31;;;;:14;:31;;;;;:51;;;:68;33358:15;:100;;33306:152;33288:945;;;33548:4;33541:11;;33288:945;;;33588:32;33612:7;33588:23;:32::i;:::-;:60;;;;33624:24;33640:7;33624:15;:24::i;:::-;33570:663;;;33903:14;;33828:31;;;;:14;:31;;;;;:51;;;:89;33792:15;:125;33770:209;;33959:4;33952:11;;33570:663;;;34000:23;34015:7;34000:14;:23::i;:::-;33996:237;;;34160:14;;34141:8;:16;;;:33;34122:15;:52;34118:104;;34202:4;34195:11;;34118:104;34249:4;34245:223;;;34311:78;34339:7;532:1:5;34311:9:6;:78::i;:::-;34270:31;;;;:14;:31;;;;;;;;;:119;;-1:-1:-1;;34270:119:6;;;;;;;;;;;;;34409:47;;;;;34445:10;34409:47;;;;;;;;;;;;;;;;;;;34245:223;32220:2255;;;;:::o;21064:4338::-;1349:8:28;:6;:8::i;:::-;1348:9;1340:38;;;;;-1:-1:-1;;;1340:38:28;;;;;;;;;;;;-1:-1:-1;;;1340:38:28;;;;;;;;;;;;;;;6684:18:6::1;::::0;-1:-1:-1;;;;;6684:18:6::1;6676:59;;;::::0;;-1:-1:-1;;;6676:59:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;;::::1;;6858:18;::::0;-1:-1:-1;;;;;6858:18:6::1;6844:10;:32;6836:60;;;::::0;;-1:-1:-1;;;6836:60:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;;::::1;;7509:14:::2;::::0;7501:48:::2;::::0;;-1:-1:-1;;;7501:48:6;;::::2;::::0;::::2;::::0;;;;;21236:15;;21253:10;;-1:-1:-1;;;;;7501:59:6;;::::2;::::0;7509:14;::::2;::::0;7501:31:::2;::::0;:48;;;;;::::2;::::0;;;;;;;;;7509:14;7501:48;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;7501:48:6;-1:-1:-1;;;;;7501:59:6::2;;7479:123;;;::::0;;-1:-1:-1;;;7479:123:6;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;7479:123:6;;;;;;;;;;;;;::::2;;21313:31:::3;::::0;;;:14:::3;:31;::::0;;;;:38;21304:62:::3;::::0;21313:38:::3;;437:1:5;21304:8:6;:62::i;:::-;21303:63;21281:131;;;::::0;;-1:-1:-1;;;21281:131:6;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;21281:131:6;;;;;;;;;;;;;::::3;;21537:31;::::0;;;:14:::3;:31;::::0;;;;:38;21528:59:::3;::::0;21537:38:::3;;::::0;21528:8:::3;:59::i;:::-;21527:60;21505:127;;;::::0;;-1:-1:-1;;;21505:127:6;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;21505:127:6;;;;;;;;;;;;;::::3;;21776:23;;:::i;:::-;21815:8;:52;21824:42;21850:15;21824:25;:42::i;:::-;21815:52:::0;;::::3;::::0;;::::3;::::0;;;;;;;;-1:-1:-1;21815:52:6;;;21776:91;;::::3;::::0;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;;::::3;::::0;::::3;::::0;::::3;::::0;-1:-1:-1;;;;;21776:91:6::3;::::0;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;;::::3;::::0;::::3;::::0;;;21957:31;;;:14:::3;:31:::0;;;;:38;21776:91;;-1:-1:-1;21933:63:6::3;::::0;21957:38:::3;;21933:23;:63::i;:::-;:135;;;-1:-1:-1::0;22029:31:6::3;::::0;;;:14:::3;:31;::::0;;;;:38;22013:55:::3;::::0;22029:38:::3;;22013:15;:55::i;:::-;21915:3480;;;22149:31;::::0;;;:14:::3;:31;::::0;;;;:38;22118:127:::3;::::0;22149:38:::3;;488:1:5;22118:8:6;:127::i;:::-;22095:921;;22483:17;::::0;22437:14:::3;::::0;22354:31:::3;::::0;;;:14:::3;:31;::::0;;;;:51:::3;;::::0;:97:::3;:146;22310:15;:190;;22280:286;;;::::0;;-1:-1:-1;;;22280:286:6;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;;;;;;;;;22280:286:6;;;;;;;;;;;;;::::3;;22095:921;;;22842:14;::::0;22759:31:::3;::::0;;;:14:::3;:31;::::0;;;;:51:::3;;::::0;:97:::3;22715:15;:141;;22685:237;;;::::0;;-1:-1:-1;;;22685:237:6;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;;;;;;;;;22685:237:6;;;;;;;;;;;;;::::3;;23032:31;::::0;;;:14:::3;:31;::::0;;;;23089:33:::3;23032:54;::::0;::::3;:90:::0;23206:38;23178:112:::3;::::0;23206:38:::3;;437:1:5;23178:9:6;:112::i;:::-;23137:31;::::0;;;:14:::3;:31;::::0;;;;;;;;:153;;-1:-1:-1;;23137:153:6::3;;::::0;;;::::3;::::0;;;::::3;::::0;;;23312:35;;;;;;;::::3;::::0;;;;;;;;;::::3;21915:3480;;;23412:31;::::0;;;:14:::3;:31;::::0;;;;:38;23397:54:::3;::::0;23412:38:::3;;23397:14;:54::i;:::-;23393:2002;;;23522:31;::::0;;;:14:::3;:31;::::0;;;;:38;23491:127:::3;::::0;23522:38:::3;;488:1:5;23491:8:6;:127::i;:::-;23468:739;;23763:17;;23746:14;;23727:8;:16;;;:33;:53;23683:15;:97;;23653:193;;;::::0;;-1:-1:-1;;;23653:193:6;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;;;;;;;;;23653:193:6;;;;;;;;;;;;;::::3;23468:739;24033:14;;24014:8;:16;;;:33;23995:15;:52;;23965:148;;;::::0;;-1:-1:-1;;;23965:148:6;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;;;;;;;;;23965:148:6;;;;;;;;;;;;;::::3;23393:2002;24617:31;::::0;;;:14:::3;:31;::::0;;;;:38;24608:66:::3;::::0;24617:38:::3;;488:1:5;24608:8:6;:66::i;:::-;24590:805;;;24846:14;::::0;24767:31:::3;::::0;;;:14:::3;:31;::::0;;;;:51:::3;;::::0;:93:::3;24727:15;:133;;24701:217;;;::::0;;-1:-1:-1;;;24701:217:6;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;;;;;;;;;24701:217:6;;;;;;;;;;;;;::::3;;25084:31;::::0;;;:14:::3;:31;::::0;;;;:38;25056:112:::3;::::0;25084:38:::3;;437:1:5;25056:9:6;:112::i;24590:805::-;25258:29;::::0;;-1:-1:-1;;;25258:29:6;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;25258:29:6;;;;;;;;;;;;;::::3;24590:805;7697:1;6991::::2;;21064:4338:::0;;:::o;1700:145:21:-;1291:12;:10;:12::i;:::-;-1:-1:-1;;;;;1280:23:21;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1280:23:21;;1272:68;;;;;-1:-1:-1;;;1272:68:21;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:68:21;;;;;;;;;;;;;;;1806:1:::1;1790:6:::0;;1769:40:::1;::::0;-1:-1:-1;;;;;1790:6:21;;::::1;::::0;-1:-1:-1;;;;;;;;;;;1769:40:21;1806:1;;1769:40:::1;1836:1;1819:19:::0;;-1:-1:-1;;;;;;1819:19:21::1;::::0;;1700:145::o;17573:246:6:-;1614:8:28;:6;:8::i;:::-;1606:41;;;;;-1:-1:-1;;;1606:41:28;;;;;;;;;;;;-1:-1:-1;;;1606:41:28;;;;;;;;;;;;;;;7054:14:6::1;::::0;-1:-1:-1;;;;;7054:14:6::1;7046:55;;;::::0;;-1:-1:-1;;;7046:55:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;7046:55:6;;;;;;;;;;;;;::::1;;7224:14;::::0;-1:-1:-1;;;;;7224:14:6::1;7210:10;:28;7202:55;;;::::0;;-1:-1:-1;;;7202:55:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;7202:55:6;;;;;;;;;;;;;::::1;;17760:14:::2;::::0;17745:66:::2;::::0;;-1:-1:-1;;;17745:66:6;;-1:-1:-1;;;;;17745:66:6;;::::2;;::::0;::::2;::::0;;;;;;;;;;;;;;;17760:14;;;::::2;::::0;17745:35:::2;::::0;:66;;;;;17760:14:::2;::::0;17745:66;;;;;;;17760:14;;17745:66;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;17573:246:::0;;;:::o;1353:29::-;;;-1:-1:-1;;;;;1353:29:6;;:::o;30279:396::-;7054:14;;-1:-1:-1;;;;;7054:14:6;7046:55;;;;;-1:-1:-1;;;7046:55:6;;;;;;;;;;;;-1:-1:-1;;;7046:55:6;;;;;;;;;;;;;;;7224:14;;-1:-1:-1;;;;;7224:14:6;7210:10;:28;7202:55;;;;;-1:-1:-1;;;7202:55:6;;;;;;;;;;;;-1:-1:-1;;;7202:55:6;;;;;;;;;;;;;;;30417:20;30409:47:::1;;;::::0;;-1:-1:-1;;;30409:47:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30409:47:6;;;;;;;;;;;;;::::1;;30557:31;::::0;;;:14:::1;:31;::::0;;;;;;;:56;;-1:-1:-1;;30557:56:6::1;;;::::0;;30631:36;;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;;;;;;;30631:36:6;;;;;;;;;::::1;30279:396:::0;:::o;2649:48::-;;;;;;;;;;;;;:::o;5088:32::-;;;;:::o;8844:1731::-;6684:18;;9115:7;;-1:-1:-1;;;;;6684:18:6;6676:59;;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;;;;6858:18;;-1:-1:-1;;;;;6858:18:6;6844:10;:32;6836:60;;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;;;;9157:8:::1;9143:10;:22;;9135:56;;;::::0;;-1:-1:-1;;;9135:56:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9135:56:6;;;;;;;;;;;;;::::1;;9360:15;9378:9;9360:27;9348:8;:39;;9340:71;;;::::0;;-1:-1:-1;;;9340:71:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9340:71:6;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;9671:20:6;::::1;9602:11;9671:20:::0;;;:11:::1;:20;::::0;;;;;;;;:22;;::::1;::::0;::::1;::::0;;;9654:62;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9630:97;;;::::1;::::0;9744:11:::1;:18:::0;:22;9740:176:::1;;9821:13;::::0;;;:8:::1;:13;::::0;;;;:17:::1;;::::0;9809:11:::1;:30:::0;;9843:3;;9821:17;9809:30;::::1;;;;;;;;;;;;;:37;;9783:121;;;::::0;;-1:-1:-1;;;9783:121:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9783:121:6;;;;;;;;;;;;;::::1;;9944:327;;;;;;;;9978:3;9944:327;;;;10003:11;:20;10015:7;-1:-1:-1::0;;;;;10003:20:6::1;-1:-1:-1::0;;;;;10003:20:6::1;;;;;;;;;;;;;9944:327;;;;10046:7;-1:-1:-1::0;;;;;9944:327:6::1;;;;;10079:10;9944:327;;;;10113:8;9944:327;;;;10143:6;9944:327;;;;10175:10;9944:327;;;;10211:10;9944:327;;;;10241:11;:18;;;;9944:327;;::::0;9928:8:::1;:13;9937:3;9928:13;;;;;;;;;;;:343;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;9928:343:6::1;;;;;-1:-1:-1::0;;;;;9928:343:6::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10284:11;10301:3;10284:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10408:7;-1:-1:-1::0;;;;;10323:188:6::1;10373:11;:20;10385:7;-1:-1:-1::0;;;;;10373:20:6::1;-1:-1:-1::0;;;;;10373:20:6::1;;;;;;;;;;;;;10355:3;10323:188;10430:10;10455:8;10499:1;10478:11;:18;;;;:22;10323:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10531:36;10543:7;10552:3;10557:9;10531:11;:36::i;:::-;10524:43:::0;8844:1731;-1:-1:-1;;;;;;;;;8844:1731:6:o;20059:810::-;1349:8:28;:6;:8::i;:::-;1348:9;1340:38;;;;;-1:-1:-1;;;1340:38:28;;;;;;;;;;;;-1:-1:-1;;;1340:38:28;;;;;;;;;;;;;;;6684:18:6::1;::::0;-1:-1:-1;;;;;6684:18:6::1;6676:59;;;::::0;;-1:-1:-1;;;6676:59:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;;::::1;;6858:18;::::0;-1:-1:-1;;;;;6858:18:6::1;6844:10;:32;6836:60;;;::::0;;-1:-1:-1;;;6836:60:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;;::::1;;7509:14:::2;::::0;7501:48:::2;::::0;;-1:-1:-1;;;7501:48:6;;::::2;::::0;::::2;::::0;;;;;20229:15;;20246:10;;-1:-1:-1;;;;;7501:59:6;;::::2;::::0;7509:14;::::2;::::0;7501:31:::2;::::0;:48;;;;;::::2;::::0;;;;;;;;;7509:14;7501:48;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;7501:48:6;-1:-1:-1;;;;;7501:59:6::2;;7479:123;;;::::0;;-1:-1:-1;;;7479:123:6;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;7479:123:6;;;;;;;;;;;;;::::2;;20313:31:::3;::::0;;;:14:::3;:31;::::0;;;;:38;20296:56:::3;::::0;20313:38:::3;;20296:16;:56::i;:::-;20274:125;;;::::0;;-1:-1:-1;;;20274:125:6;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;20274:125:6;;;;;;;;;;;;;::::3;;20541:35;20560:15;20541:18;:35::i;:::-;-1:-1:-1::0;20589:31:6::3;::::0;;;:14:::3;:31;::::0;;;;20643:15:::3;20589:51;::::0;::::3;:69:::0;20734:38;20710:98:::3;::::0;20734:38:::3;;345:1:5;20710:9:6;:98::i;:::-;20669:31;::::0;;;:14:::3;:31;::::0;;;;;;;;:139;;-1:-1:-1;;20669:139:6::3;;::::0;;;::::3;::::0;;;::::3;::::0;;;20826:35;;;;;;;::::3;::::0;;;;;;;;;::::3;6991:1:::2;;20059:810:::0;;:::o;18792:1002::-;1349:8:28;:6;:8::i;:::-;1348:9;1340:38;;;;;-1:-1:-1;;;1340:38:28;;;;;;;;;;;;-1:-1:-1;;;1340:38:28;;;;;;;;;;;;;;;6684:18:6::1;::::0;-1:-1:-1;;;;;6684:18:6::1;6676:59;;;::::0;;-1:-1:-1;;;6676:59:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;;::::1;;6858:18;::::0;-1:-1:-1;;;;;6858:18:6::1;6844:10;:32;6836:60;;;::::0;;-1:-1:-1;;;6836:60:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;;::::1;;7509:14:::2;::::0;7501:48:::2;::::0;;-1:-1:-1;;;7501:48:6;;::::2;::::0;::::2;::::0;;;;;18962:15;;18979:10;;-1:-1:-1;;;;;7501:59:6;;::::2;::::0;7509:14;::::2;::::0;7501:31:::2;::::0;:48;;;;;::::2;::::0;;;;;;;;;7509:14;7501:48;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;7501:48:6;-1:-1:-1;;;;;7501:59:6::2;;7479:123;;;::::0;;-1:-1:-1;;;7479:123:6;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;7479:123:6;;;;;;;;;;;;;::::2;;19070:31:::3;::::0;;;:14:::3;:31;::::0;;;;:38;19053:56:::3;::::0;19070:38:::3;;19053:16;:56::i;:::-;19031:123;;;::::0;;-1:-1:-1;;;19031:123:6;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;19031:123:6;;;;;;;;;;;;;::::3;;19282:35;19301:15;19282:18;:35::i;:::-;;19328:23;;:::i;:::-;19367:8;:52;19376:42;19402:15;19376:25;:42::i;:::-;19367:52:::0;;::::3;::::0;;::::3;::::0;;;;;;;;-1:-1:-1;19367:52:6;;;19328:91;;::::3;::::0;::::3;::::0;;;;;;::::3;::::0;;::::3;::::0;;;::::3;::::0;::::3;::::0;::::3;::::0;-1:-1:-1;;;;;19328:91:6::3;::::0;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;;::::3;::::0;;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;;::::3;::::0;::::3;::::0;;;19432:31;;;:14:::3;:31:::0;;;;;;;19486:15:::3;19432:51:::0;;::::3;:69:::0;;;;19577:38;;19328:91;;-1:-1:-1;19553:98:6::3;::::0;19577:38:::3;::::0;;::::3;::::0;19553:9:::3;:98::i;:::-;19512:31;::::0;;;:14:::3;:31;::::0;;;;;;;;:139;;-1:-1:-1;;19512:139:6::3;;::::0;;;::::3;::::0;;;::::3;::::0;;;19757:18;;19669:117;;;;;-1:-1:-1;;;;;19669:117:6;::::3;::::0;;::::3;::::0;;;;;;;;;::::3;::::0;;;;;;;;::::3;7697:1;6991::::2;;18792:1002:::0;;:::o;3239:63::-;-1:-1:-1;;;;;;3239:63:6;:::o;2308:46::-;;;;;;;;;;;;;:::o;37419:160::-;37522:7;37554:11;37566:4;37554:17;;;;;;;;;;;;;;;;37547:24;;37419:160;;;:::o;8065:77::-;6684:18;;-1:-1:-1;;;;;6684:18:6;6676:59;;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;;;;6858:18;;-1:-1:-1;;;;;6858:18:6;6844:10;:32;6836:60;;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;;;;8126:8:::1;:6;:8::i;40478:247::-:0;40594:7;40640:29;;;:13;:29;;;;;;;;;40687:20;;:8;:20;;;;;:30;;;;40478:247::o;34811:257::-;6684:18;;-1:-1:-1;;;;;6684:18:6;6676:59;;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;;;;6858:18;;-1:-1:-1;;;;;6858:18:6;6844:10;:32;6836:60;;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;;;;34959:18:::1;34980:29:::0;;;:13:::1;:29;::::0;;;;;;;;35020:20;;:8:::1;:20:::0;;;;;;:27:::1;;:40:::0;;-1:-1:-1;;;;;;35020:40:6::1;-1:-1:-1::0;;;;;35020:40:6;;::::1;::::0;;;::::1;::::0;;34811:257::o;36415:234::-;1291:12:21;:10;:12::i;:::-;-1:-1:-1;;;;;1280:23:21;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1280:23:21;;1272:68;;;;;-1:-1:-1;;;1272:68:21;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:68:21;;;;;;;;;;;;;;;36538:14:6::1;:32:::0;;;36588:53:::1;::::0;;;;;36630:10:::1;36588:53;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;36415:234:::0;:::o;2067:33::-;;;-1:-1:-1;;;;;2067:33:6;;:::o;1068:85:21:-;1114:7;1140:6;-1:-1:-1;;;;;1140:6:21;1068:85;:::o;4342:21:6:-;;;;:::o;3140:47::-;;;;;;;;;;;;;:::o;43670:623::-;43789:4;43844:23;;:::i;:::-;43883:8;:52;43892:42;43918:15;43892:25;:42::i;:::-;43883:52;;;;;;;;;;;;;;-1:-1:-1;43883:52:6;43844:91;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43844:91:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43976:15:6;-1:-1:-1;43954:37:6;43946:71;;;;;-1:-1:-1;;;43946:71:6;;;;;;;;;;;;-1:-1:-1;;;43946:71:6;;;;;;;;;;;;;;;44139:15;44119:8;:16;;;:35;;44111:67;;;;;-1:-1:-1;;;44111:67:6;;;;;;;;;;;;-1:-1:-1;;;44111:67:6;;;;;;;;;;;;;;;-1:-1:-1;44281:4:6;;43670:623;-1:-1:-1;;43670:623:6:o;42854:213::-;42976:7;43008:30;;;:14;:30;;;;;:51;;;-1:-1:-1;;;;;43008:51:6;;42854:213::o;38159:438::-;38285:7;38318:20;38310:47;;;;;-1:-1:-1;;;38310:47:6;;;;;;;;;;;;-1:-1:-1;;;38310:47:6;;;;;;;;;;;;;;;38460:21;38484:39;38507:15;38484:22;:39::i;:::-;38541:38;38550:28;;;:13;:28;;;;;;;;;38541:38;;:8;:38;;;;;:48;;38159:438;-1:-1:-1;;;38159:438:6:o;35223:397::-;1291:12:21;:10;:12::i;:::-;-1:-1:-1;;;;;1280:23:21;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1280:23:21;;1272:68;;;;;-1:-1:-1;;;1272:68:21;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:68:21;;;;;;;;;;;;;;;-1:-1:-1;;;;;35344:33:6;::::1;35336:65;;;::::0;;-1:-1:-1;;;35336:65:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35336:65:6;;;;;;;;;;;;;::::1;;35504:18;:40:::0;;-1:-1:-1;;;;;;35504:40:6::1;-1:-1:-1::0;;;;;35504:40:6;::::1;::::0;;::::1;::::0;;;35562:50:::1;::::0;;;;;35601:10:::1;35562:50;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;35223:397:::0;:::o;35766:387::-;1291:12:21;:10;:12::i;:::-;-1:-1:-1;;;;;1280:23:21;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1280:23:21;;1272:68;;;;;-1:-1:-1;;;1272:68:21;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:68:21;;;;;;;;;;;;;;;-1:-1:-1;;;;;35897:29:6;::::1;35889:61;;;::::0;;-1:-1:-1;;;35889:61:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35889:61:6;;;;;;;;;;;;;::::1;;36053:14;:32:::0;;-1:-1:-1;;;;;;36053:32:6::1;-1:-1:-1::0;;;;;36053:32:6;::::1;::::0;;::::1;::::0;;;36103:42:::1;::::0;;;;;36134:10:::1;36103:42;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;35766:387:::0;:::o;2218:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2218:43:6;;;;;;;;;;;;:::o;11117:421::-;6684:18;;-1:-1:-1;;;;;6684:18:6;6676:59;;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;-1:-1:-1;;;6676:59:6;;;;;;;;;;;;;;;6858:18;;-1:-1:-1;;;;;6858:18:6;6844:10;:32;6836:60;;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;-1:-1:-1;;;6836:60:6;;;;;;;;;;;;;;;11357:173:::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;11357:173:6;;::::1;;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;-1:-1:-1;11324:30:6;;;:14:::1;:30:::0;;;;;;;:206;;;;;;;::::1;;;-1:-1:-1::0;;;;;;11324:206:6;;;::::1;-1:-1:-1::0;;11324:206:6;;::::1;::::0;;;::::1;;::::0;;;::::1;::::0;;;;;;;::::1;::::0;;;;;::::1;-1:-1:-1::0;;;;;;11324:206:6;;::::1;::::0;;;::::1;::::0;;11117:421::o;31352:730::-;31441:20;31433:47;;;;;-1:-1:-1;;;31433:47:6;;;;;;;;;;;;-1:-1:-1;;;31433:47:6;;;;;;;;;;;;;;;31583:23;;:::i;:::-;31622:8;:52;31631:42;31657:15;31631:25;:42::i;:::-;31622:52;;;;;;;;;;;;;;-1:-1:-1;31622:52:6;31583:91;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31583:91:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31724:15:6;-1:-1:-1;31705:107:6;;;;-1:-1:-1;31773:31:6;;;;:14;:31;;;;;:38;31756:56;;31773:38;;31756:16;:56::i;:::-;31687:388;;;31908:31;;;;:14;:31;;;;;:38;31880:110;;31908:38;;390:1:5;31880:9:6;:110::i;:::-;31839:31;;;;:14;:31;;;;;;;;;:151;;-1:-1:-1;;31839:151:6;;;;;;;;;;;;;32012:51;;;;;32052:10;32012:51;;;;;;;;;;;;;;;;;;;31687:388;31352:730;;:::o;39352:424::-;39479:7;39579:29;;;:13;:29;;;;;;;;;39641:20;;:8;:20;;;;;:26;;;;39682:30;;;;39727;;;;;39641:26;;39352:424::o;3984:46::-;-1:-1:-1;;;3984:46:6;:::o;38879:232::-;39054:14;;39045:58;;;-1:-1:-1;;;39045:58:6;;-1:-1:-1;;;;;39045:58:6;;;;;;;;;;;;;;;39013:7;;39054:14;;;;;39045:34;;:58;;;;;;;;;;;;;;;39054:14;39045:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39045:58:6;;38879:232;-1:-1:-1;;;38879:232:6:o;2500:62::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2500:62:6;;;;;;;;;:::o;42415:208::-;42535:7;42567:30;;;:14;:30;;;;;:48;;;;-1:-1:-1;;;;;42567:48:6;;42415:208::o;30825:398::-;7054:14;;-1:-1:-1;;;;;7054:14:6;7046:55;;;;;-1:-1:-1;;;7046:55:6;;;;;;;;;;;;-1:-1:-1;;;7046:55:6;;;;;;;;;;;;;;;7224:14;;-1:-1:-1;;;;;7224:14:6;7210:10;:28;7202:55;;;;;-1:-1:-1;;;7202:55:6;;;;;;;;;;;;-1:-1:-1;;;7202:55:6;;;;;;;;;;;;;;;30964:20;30956:47:::1;;;::::0;;-1:-1:-1;;;30956:47:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30956:47:6;;;;;;;;;;;;;::::1;;31104:31;::::0;;;:14:::1;:31;::::0;;;;;;;;:57;;-1:-1:-1;;31104:57:6::1;::::0;::::1;::::0;;31179:36;;;;;31157:4:::1;31179:36:::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;;;;;;;31179:36:6;;;;;;;;;::::1;30825:398:::0;:::o;2780:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36924:252::-;1291:12:21;:10;:12::i;:::-;-1:-1:-1;;;;;1280:23:21;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1280:23:21;;1272:68;;;;;-1:-1:-1;;;1272:68:21;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:68:21;;;;;;;;;;;;;;;37053:17:6::1;:38:::0;;;37109:59:::1;::::0;;;;;37157:10:::1;37109:59;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;36924:252:::0;:::o;1994:240:21:-;1291:12;:10;:12::i;:::-;-1:-1:-1;;;;;1280:23:21;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1280:23:21;;1272:68;;;;;-1:-1:-1;;;1272:68:21;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:68:21;;;;;;;;;;;;;;;-1:-1:-1;;;;;2082:22:21;::::1;2074:73;;;;-1:-1:-1::0;;;2074:73:21::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2183:6;::::0;;2162:38:::1;::::0;-1:-1:-1;;;;;2162:38:21;;::::1;::::0;2183:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2162:38:21;::::1;2210:6;:17:::0;;-1:-1:-1;;;;;;2210:17:21::1;-1:-1:-1::0;;;;;2210:17:21;;;::::1;::::0;;;::::1;::::0;;1994:240::o;5052:29:6:-;;;;:::o;25583:3567::-;1349:8:28;:6;:8::i;:::-;1348:9;1340:38;;;;;-1:-1:-1;;;1340:38:28;;;;;;;;;;;;-1:-1:-1;;;1340:38:28;;;;;;;;;;;;;;;25726:21:6::1;25750:39;25773:15;25750:22;:39::i;:::-;25726:63;;25856:10;-1:-1:-1::0;;;;;25822:44:6::1;:30;25838:13;25822:15;:30::i;:::-;-1:-1:-1::0;;;;;25822:44:6::1;;25800:110;;;::::0;;-1:-1:-1;;;25800:110:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25800:110:6;;;;;;;;;;;;;::::1;;26007:13;26023:31:::0;;;:14:::1;:31;::::0;;;;:38;::::1;;26083:35;26023:38:::0;488:1:5::1;26083:8:6;:35::i;:::-;26082:36;26074:68;;;::::0;;-1:-1:-1;;;26074:68:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26074:68:6;;;;;;;;;;;;;::::1;;26244:28;26253:7;532:1:5;26244:8:6;:28::i;:::-;26243:29;26235:59;;;::::0;;-1:-1:-1;;;26235:59:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26235:59:6;;;;;;;;;;;;;::::1;;26389:23;;:::i;:::-;26428:8;:52;26437:42;26463:15;26437:25;:42::i;:::-;26428:52:::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;26428:52:6;26389:91;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;26389:91:6::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;26497:29:6::1;::::0;26506:7;;26497:8:::1;:29::i;:::-;:62;;;;26530:29;26539:7;345:1:5;26530:8:6;:29::i;:::-;26493:2467;;;26620:31;26629:7;437:1:5;26620:8:6;:31::i;:::-;26615:931;;26875:17;::::0;26829:14:::1;::::0;26746:31:::1;::::0;;;:14:::1;:31;::::0;;;;:51:::1;;::::0;:97:::1;:146;26702:15;:190;;26672:281;;;::::0;;-1:-1:-1;;;26672:281:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26672:281:6;;;;;;;;;;;;;::::1;;27050:31;::::0;;;:14:::1;:31;::::0;;;;27104:37:::1;27050:51;::::0;;::::1;:91:::0;26615:931:::1;;;27374:17;::::0;27288:31:::1;::::0;;;:14:::1;:31;::::0;;;;:54:::1;;::::0;:103:::1;27244:15;:147;;27214:238;;;::::0;;-1:-1:-1;;;27214:238:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27214:238:6;;;;;;;;;;;;;::::1;;26493:2467;;;27567:29;27576:7;390:1:5;27567:8:6;:29::i;:::-;27563:1397;;;27644:31;27653:7;437:1:5;27644:8:6;:31::i;:::-;27639:696;;27806:17;;27789:14;;27770:8;:16;;;:33;:53;27726:15;:97;;27696:188;;;::::0;;-1:-1:-1;;;27696:188:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27696:188:6;;;;;;;;;;;;;::::1;;27639:696;;27563:1397;28356:25;28373:7;28356:16;:25::i;:::-;28352:608;;;28533:17;;28516:14;;28497:8;:16;;;:33;:53;28457:15;:93;;28431:172;;;::::0;;-1:-1:-1;;;28431:172:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28431:172:6;;;;;;;;;;;;;::::1;;28696:31;::::0;;;:14:::1;:31;::::0;;;;28750:15:::1;28696:51;::::0;;::::1;:69:::0;28352:608:::1;29013:73;29037:7;488:1:5;29013:9:6;:73::i;:::-;28972:31;::::0;;;:14:::1;:31;::::0;;;;;;;;:114;;-1:-1:-1;;28972:114:6::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;29104:38;;;;;;;::::1;::::0;;;;;;;;;::::1;1388:1:28;;;25583:3567:6::0;;:::o;41518:205::-;41675:14;;41667:48;;;-1:-1:-1;;;41667:48:6;;;;;;;;;;41635:7;;-1:-1:-1;;;;;41675:14:6;;41667:31;;:48;;;;;;;;;;;;;;41675:14;41667:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41667:48:6;;41518:205;-1:-1:-1;;41518:205:6:o;40017:288::-;40135:7;40190:29;;;:13;:29;;;;;;;;;40238:20;;:8;:20;;;;;:26;;;;40266:30;;;;;40238:26;;40017:288::o;2047:117:28:-;1614:8;:6;:8::i;:::-;1606:41;;;;;-1:-1:-1;;;1606:41:28;;;;;;;;;;;;-1:-1:-1;;;1606:41:28;;;;;;;;;;;;;;;2115:5:::1;2105:15:::0;;-1:-1:-1;;;;2105:15:28::1;::::0;;2135:22:::1;2144:12;:10;:12::i;:::-;2135:22;::::0;;-1:-1:-1;;;;;2135:22:28;;::::1;::::0;;;;;;;::::1;::::0;;::::1;2047:117::o:0;14213:1142:6:-;14366:19;14358:46;;;;;-1:-1:-1;;;14358:46:6;;;;;;;;;;;;-1:-1:-1;;;14358:46:6;;;;;;;;;;;;;;;14511:20;:7;-1:-1:-1;;;;;14511:18:6;;:20::i;:::-;14507:282;;;14574:46;;;-1:-1:-1;;;14574:46:6;;-1:-1:-1;;;14574:46:6;;;;;;-1:-1:-1;;;;;14574:34:6;;;;;:46;;;;;;;;;;;;;;:34;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14574:46:6;14548:135;;;;;-1:-1:-1;;;14548:135:6;;;;;;;;;;;;-1:-1:-1;;;14548:135:6;;;;;;;;;;;;;;;-1:-1:-1;;;;;14809:21:6;;14801:53;;;;;-1:-1:-1;;;14801:53:6;;;;;;;;;;;;-1:-1:-1;;;14801:53:6;;;;;;;;;;;;;;;14986:14;;14977:59;;;-1:-1:-1;;;14977:59:6;;-1:-1:-1;;;;;14977:59:6;;;;;;;;;;;;;;;15039:1;;14986:14;;;;;14977:34;;:59;;;;;;;;;;;;;;;14986:14;14977:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14977:59:6;:63;14955:124;;;;;-1:-1:-1;;;14955:124:6;;;;;;;;;;;;-1:-1:-1;;;14955:124:6;;;;;;;;;;;;;;;15174:18;15195:29;;;:13;:29;;;;;;;;;15259:20;;;:8;:20;;;;;;:28;;15291:15;-1:-1:-1;15259:47:6;15237:110;;;;;-1:-1:-1;;;15237:110:6;;;;;;;;;;;;-1:-1:-1;;;15237:110:6;;;;;;;;;;;;;;15806:1387;15932:7;15956:16;:3;-1:-1:-1;;;;;15956:14:6;;:16::i;:::-;15952:545;;;16015:185;;;-1:-1:-1;;;16015:185:6;;;-1:-1:-1;;;;;16015:185:6;;;;;;;16109:10;16015:185;;;;;;;;;;;;;;;-1:-1:-1;16015:185:6;;;;;;;;16204:50;;16015:41;;;;16204:50;;16015:185;;;;;;;;;;;;;;;;:41;:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16015:185:6;-1:-1:-1;;;;;;16015:239:6;;15989:328;;;;;-1:-1:-1;;;15989:328:6;;;;;;;;;;;;-1:-1:-1;;;15989:328:6;;;;;;;;;;;;;;;16524:14;;;16509:63;;;-1:-1:-1;;;16509:63:6;;-1:-1:-1;;;;;16509:63:6;;;;;;;;;;;;;;;;;;;;;;16524:14;;;;;16509:35;;:63;;;;;16524:14;;16509:63;;;;;;;;16524:14;;16509:63;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16651:22:6;16708:28;;;:12;:28;;;;;;;;16706:30;;;;;;;;16689:47;;16835:30;;;:14;:30;;;;;;:37;16689:47;;-1:-1:-1;16811:97:6;;16835:37;;255:1:5;16811:9:6;:97::i;:::-;16771:30;;;;:14;:30;;;;;;;;:137;;-1:-1:-1;;16771:137:6;;;;;;;;;;-1:-1:-1;;16986:57:6;;;;-1:-1:-1;17110:14:6;17095:56;;-1:-1:-1;;;17095:56:6;;-1:-1:-1;;;;;17095:56:6;;;;;;;;;;;;;;;17110:14;;;;;17095:35;;:56;;;;;16771:30;17095:56;;;;;;;17110:14;17095:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17171:14:6;;15806:1387;-1:-1:-1;;;;;15806:1387:6:o;3468:128:5:-;3561:15;;;;;;;210:1;3560:23;;;:28;;3468:128::o;2315:193::-;2413:4;2453:47;2463:24;2473:1;255;2463:9;:24::i;:::-;300:1;2453:9;:47::i;:::-;2442:58;;:7;:58;;;2435:65;;2315:193;;;:::o;2715:153::-;2778:4;2813:47;2823:24;2833:1;255;2823:9;:24::i;:::-;345:1;2813:9;:47::i;3074:152::-;3136:4;3171:47;3181:24;3191:1;255;3181:9;:24::i;:::-;390:1;3737:169;210:1;3880:17;;;;;;3869:29;;3737:169::o;598:104:26:-;685:10;598:104;:::o;11928:938:6:-;12056:7;12084:24;12076:56;;;;;-1:-1:-1;;;12076:56:6;;;;;;;;;;;;-1:-1:-1;;;12076:56:6;;;;;;;;;;;;;;;12241:20;;;;:8;:20;;;;;:27;;;-1:-1:-1;;;;;12241:38:6;;;:27;;:38;12233:66;;;;;-1:-1:-1;;;12233:66:6;;;;;;;;;;;;-1:-1:-1;;;12233:66:6;;;;;;;;;;;;;;;12414:1;12402:9;:13;12394:42;;;;;-1:-1:-1;;;12394:42:6;;;;;;;;;;;;-1:-1:-1;;;12394:42:6;;;;;;;;;;;;;;;12532:21;12556:23;12574:4;12556:17;:23::i;:::-;12634:28;;;;:13;:28;;;;;;:41;;;12703:14;;12688:137;;-1:-1:-1;;;12688:137:6;;-1:-1:-1;;;;;12688:137:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12532:47;;-1:-1:-1;12703:14:6;;;12688:35;;:137;;;;;12634:28;;12688:137;;;;;;12634:28;12703:14;12688:137;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12845:13:6;;11928:938;-1:-1:-1;;;;;;;11928:938:6:o;1969:131:5:-;2033:4;2068:24;2078:1;255;2068:9;:24::i;1800:115:28:-;1349:8;:6;:8::i;:::-;1348:9;1340:38;;;;;-1:-1:-1;;;1340:38:28;;;;;;;;;;;;-1:-1:-1;;;1340:38:28;;;;;;;;;;;;;;;1859:7:::1;:14:::0;;-1:-1:-1;;;;1859:14:28::1;-1:-1:-1::0;;;1859:14:28::1;::::0;;1888:20:::1;1895:12;:10;:12::i;718:413:25:-:0;1078:20;1116:8;;;718:413::o;18096:468:6:-;18216:6;:8;;;;;;18180:18;18237:290;;;;18310:3;18300:6;;:13;;-1:-1:-1;;;18285:29:6;18272:42;;18237:290;;;-1:-1:-1;;18428:6:6;;18438:3;18428:13;;18096:468::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "// SPDX-License-Identifier: LGPL-3.0-or-later\r\n\r\npragma solidity 0.7.1;\r\n\r\nimport \"@openzeppelin/contracts/utils/Address.sol\";\r\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\r\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\r\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\r\nimport \"./interfaces/IERC1155.sol\";\r\nimport \"./interfaces/IERC165.sol\";\r\nimport \"./interfaces/IERC721.sol\";\r\nimport \"./interfaces/IERC1155ERC721.sol\";\r\nimport \"./interfaces/IERC721TokenReceiver.sol\";\r\nimport \"./interfaces/IVoucherKernel.sol\";\r\nimport \"./UsingHelpers.sol\";\r\n\r\n//preparing for ERC-1066, ERC-1444, EIP-838\r\n\r\n/**\r\n * @title VoucherKernel contract is controlling the core business logic\r\n * @dev Notes:\r\n *  - Since this is a reference app, it is not yet optimized.\r\n *      In the next phase, the bulk raw data will be packed into a single bytes32 field and/or pushed off-chain.\r\n *  - The usage of block.timestamp is honored since vouchers are defined currently with day-precision.\r\n *      See: https://ethereum.stackexchange.com/questions/5924/how-do-ethereum-mining-nodes-maintain-a-time-consistent-with-the-network/5931#5931\r\n */\r\n// solhint-disable-next-line\r\ncontract VoucherKernel is IVoucherKernel, Ownable, Pausable, UsingHelpers {\r\n    using Address for address;\r\n    using SafeMath for uint256;\r\n\r\n    //AssetRegistry assetRegistry;\r\n    address public tokensContract;\r\n\r\n    //promise for an asset could be reusable, but simplified here for brevity\r\n    struct Promise {\r\n        bytes32 promiseId;\r\n        uint256 nonce; //the asset that is offered\r\n        address seller; //the seller who created the promise\r\n        //we simplify the value for the demoapp, otherwise voucher details would be packed in one bytes32 field value\r\n        uint256 validFrom;\r\n        uint256 validTo;\r\n        uint256 price;\r\n        uint256 depositSe;\r\n        uint256 depositBu;\r\n        uint256 idx;\r\n    }\r\n\r\n    struct VoucherPaymentMethod {\r\n        uint8 paymentMethod;\r\n        address addressTokenPrice;\r\n        address addressTokenDeposits;\r\n    }\r\n\r\n    address public bosonRouterAddress; //address of the Boson Router contract\r\n    address public cashierAddress; //address of the Cashier contract\r\n\r\n    mapping(bytes32 => Promise) public promises; //promises to deliver goods or services\r\n    mapping(address => uint256) public tokenNonces; //mapping between seller address and its own nonces. Every time seller creates supply ID it gets incremented. Used to avoid duplicate ID's\r\n    mapping(uint256 => VoucherPaymentMethod) public paymentDetails; // tokenSupplyId to VoucherPaymentMethod\r\n\r\n    bytes32[] public promiseKeys;\r\n\r\n    mapping(uint256 => bytes32) public ordersPromise; //mapping between an order (supply a.k.a. VoucherSet token) and a promise\r\n\r\n    mapping(uint256 => VoucherStatus) public vouchersStatus; //recording the vouchers evolution\r\n\r\n    //standard reqs\r\n    mapping(uint256 => mapping(address => uint256)) private balances; //balance of token ids of an account\r\n    mapping(address => mapping(address => bool)) private operatorApprovals; //approval of accounts of an operator\r\n\r\n    //ID reqs\r\n    mapping(uint256 => uint256) public typeCounters; //counter for ID of a particular type of NFT\r\n    uint256 public constant MASK_TYPE = uint256(uint128(~0)) << 128; //the type mask in the upper 128 bits\r\n    //1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\r\n\r\n    uint256 public constant MASK_NF_INDEX = uint128(~0); //the non-fungible index mask in the lower 128\r\n    //0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\r\n\r\n    uint256 public constant TYPE_NF_BIT = 1 << 255; //the first bit represents an NFT type\r\n    //1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\r\n\r\n    uint256 public typeId; //base token type ... 127-bits cover 1.701411835*10^38 types (not differentiating between FTs and NFTs)\r\n    /* Token IDs:\r\n    Fungibles: 0, followed by 127-bit FT type ID, in the upper 128 bits, followed by 0 in lower 128-bits\r\n    <0><uint127: base token id><uint128: 0>\r\n    \r\n    Non-fungible VoucherSets (supply tokens): 1, followed by 127-bit NFT type ID, in the upper 128 bits, followed by 0 in lower 128-bits\r\n    <1><uint127: base token id><uint128: 0    \r\n    \r\n    Non-fungible vouchers: 1, followed by 127-bit NFT type ID, in the upper 128 bits, followed by a 1-based index of an NFT token ID.\r\n    <1><uint127: base token id><uint128: index of non-fungible>\r\n    */\r\n\r\n    uint256 public complainPeriod;\r\n    uint256 public cancelFaultPeriod;\r\n\r\n    event LogPromiseCreated(\r\n        bytes32 indexed _promiseId,\r\n        uint256 indexed _nonce,\r\n        address indexed _seller,\r\n        uint256 _validFrom,\r\n        uint256 _validTo,\r\n        uint256 _idx\r\n    );\r\n\r\n    event LogVoucherDelivered(\r\n        uint256 indexed _tokenIdSupply,\r\n        uint256 _tokenIdVoucher,\r\n        address _issuer,\r\n        address _holder,\r\n        bytes32 _promiseId,\r\n        uint256 _correlationId\r\n    );\r\n\r\n    event LogVoucherRedeemed(\r\n        uint256 _tokenIdVoucher,\r\n        address _holder,\r\n        bytes32 _promiseId\r\n    );\r\n\r\n    event LogVoucherRefunded(uint256 _tokenIdVoucher);\r\n\r\n    event LogVoucherComplain(uint256 _tokenIdVoucher);\r\n\r\n    event LogVoucherFaultCancel(uint256 _tokenIdVoucher);\r\n\r\n    event LogExpirationTriggered(uint256 _tokenIdVoucher, address _triggeredBy);\r\n\r\n    event LogFinalizeVoucher(uint256 _tokenIdVoucher, address _triggeredBy);\r\n\r\n    event LogBosonRouterSet(address _newBosonRouter, address _triggeredBy);\r\n\r\n    event LogCashierSet(address _newCashier, address _triggeredBy);\r\n\r\n    event LogComplainPeriodChanged(\r\n        uint256 _newComplainPeriod,\r\n        address _triggeredBy\r\n    );\r\n\r\n    event LogCancelFaultPeriodChanged(\r\n        uint256 _newCancelFaultPeriod,\r\n        address _triggeredBy\r\n    );\r\n\r\n    event LogVoucherSetFaultCancel(uint256 _tokenIdSupply, address _issuer);\r\n\r\n    event LogFundsReleased(\r\n        uint256 _tokenIdVoucher,\r\n        uint8 _type //0 .. payment, 1 .. deposits\r\n    );\r\n\r\n    modifier onlyFromRouter() {\r\n        require(bosonRouterAddress != address(0), \"UNSPECIFIED_BR\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n        require(msg.sender == bosonRouterAddress, \"UNAUTHORIZED_BR\"); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n        _;\r\n    }\r\n\r\n    modifier onlyFromCashier() {\r\n        require(cashierAddress != address(0), \"UNSPECIFIED_BR\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n        require(msg.sender == cashierAddress, \"UNAUTHORIZED_C\"); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n        _;\r\n    }\r\n\r\n    modifier onlyVoucherOwner(uint256 _tokenIdVoucher, address _sender) {\r\n        //check authorization\r\n        require(\r\n            IERC721(tokensContract).ownerOf(_tokenIdVoucher) == _sender,\r\n            \"UNAUTHORIZED_V\"\r\n        ); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n        _;\r\n    }\r\n\r\n    constructor(address _tokensContract) {\r\n        tokensContract = _tokensContract;\r\n\r\n        complainPeriod = 7 * 1 days;\r\n        cancelFaultPeriod = 7 * 1 days;\r\n    }\r\n\r\n    /**\r\n     * @notice Pause the process of interaction with voucherID's (ERC-721), in case of emergency.\r\n     * Only BR contract is in control of this function.\r\n     */\r\n    function pause() external override onlyFromRouter {\r\n        _pause();\r\n    }\r\n\r\n    /**\r\n     * @notice Unpause the process of interaction with voucherID's (ERC-721).\r\n     * Only BR contract is in control of this function.\r\n     */\r\n    function unpause() external override onlyFromRouter {\r\n        _unpause();\r\n    }\r\n\r\n    /**\r\n     * @notice Creating a new promise for goods or services.\r\n     * Can be reused, e.g. for making different batches of these (in the future).\r\n     * @param _seller      seller of the promise\r\n     * @param _validFrom   Start of valid period\r\n     * @param _validTo     End of valid period\r\n     * @param _price       Price (payment amount)\r\n     * @param _depositSe   Seller's deposit\r\n     * @param _depositBu   Buyer's deposit\r\n     */\r\n    function createTokenSupplyID(\r\n        address _seller,\r\n        uint256 _validFrom,\r\n        uint256 _validTo,\r\n        uint256 _price,\r\n        uint256 _depositSe,\r\n        uint256 _depositBu,\r\n        uint256 _quantity\r\n    ) external override onlyFromRouter returns (uint256) {\r\n        require(_validFrom <= _validTo, \"INVALID_VALIDITY_FROM\"); //hex\"26\" FISSION.code(FISSION.Category.Find, FISSION.Status.Above_Range_Overflow)\r\n        // solhint-disable-next-line not-rely-on-time\r\n        require(_validTo >= block.timestamp + 5 minutes, \"INVALID_VALIDITY_TO\"); //\"Minimum order validity is set to prevent any potential attack from flash-loans or similar.\" //hex\"24\" FISSION.code(FISSION.Category.Find, FISSION.Status.BelowRange_Underflow)\r\n\r\n        bytes32 key;\r\n        key = keccak256(\r\n            abi.encodePacked(tokenNonces[_seller]++, _validFrom, _validTo)\r\n        );\r\n\r\n        if (promiseKeys.length > 0) {\r\n            require(\r\n                promiseKeys[promises[key].idx] != key,\r\n                \"PROMISE_ALREADY_EXISTS\"\r\n            );\r\n        }\r\n\r\n        promises[key] = Promise({\r\n            promiseId: key,\r\n            nonce: tokenNonces[_seller],\r\n            seller: _seller,\r\n            validFrom: _validFrom,\r\n            validTo: _validTo,\r\n            price: _price,\r\n            depositSe: _depositSe,\r\n            depositBu: _depositBu,\r\n            idx: promiseKeys.length\r\n        });\r\n\r\n        promiseKeys.push(key);\r\n\r\n        emit LogPromiseCreated(\r\n            key,\r\n            tokenNonces[_seller],\r\n            _seller,\r\n            _validFrom,\r\n            _validTo,\r\n            promiseKeys.length - 1\r\n        );\r\n\r\n        return createOrder(_seller, key, _quantity);\r\n    }\r\n\r\n    /**\r\n     * @notice Creates a Payment method struct recording the details on how the seller requires to receive Price and Deposits for a certain Voucher Set.\r\n     * @param _tokenIdSupply     _tokenIdSupply of the voucher set this is related to\r\n     * @param _paymentMethod  might be ETHETH, ETHTKN, TKNETH or TKNTKN\r\n     * @param _tokenPrice   token address which will hold the funds for the price of the voucher\r\n     * @param _tokenDeposits   token address which will hold the funds for the deposits of the voucher\r\n     */\r\n    function createPaymentMethod(\r\n        uint256 _tokenIdSupply,\r\n        uint8 _paymentMethod,\r\n        address _tokenPrice,\r\n        address _tokenDeposits\r\n    ) external override onlyFromRouter {\r\n        paymentDetails[_tokenIdSupply] = VoucherPaymentMethod({\r\n            paymentMethod: _paymentMethod,\r\n            addressTokenPrice: _tokenPrice,\r\n            addressTokenDeposits: _tokenDeposits\r\n        });\r\n    }\r\n\r\n    /**\r\n     * @notice Create an order for offering a certain quantity of an asset\r\n     * This creates a listing in a marketplace, technically as an ERC-1155 non-fungible token with supply.\r\n     * @param _seller     seller of the promise\r\n     * @param _promiseId  ID of a promise (simplified into asset for demo)\r\n     * @param _quantity   Quantity of assets on offer\r\n     */\r\n    function createOrder(\r\n        address _seller,\r\n        bytes32 _promiseId,\r\n        uint256 _quantity\r\n    ) private returns (uint256) {\r\n        require(_promiseId != bytes32(0), \"UNSPECIFIED_PROMISE\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n        require(promises[_promiseId].seller == _seller, \"UNAUTHORIZED_CO\"); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n        require(_quantity > 0, \"INVALID_QUANTITY\"); //hex\"24\" FISSION.code(FISSION.Category.Find, FISSION.Status.BelowRange_Underflow)\r\n\r\n        uint256 tokenIdSupply = generateTokenType(true); //create & assign a new non-fungible type\r\n\r\n        ordersPromise[tokenIdSupply] = _promiseId;\r\n\r\n        IERC1155ERC721(tokensContract).mint(\r\n            _seller,\r\n            tokenIdSupply,\r\n            _quantity,\r\n            \"\"\r\n        );\r\n\r\n        return tokenIdSupply;\r\n    }\r\n\r\n    /**\r\n     * @notice Fill Voucher Order, iff funds paid, then extract & mint NFT to the voucher holder\r\n     * @param _tokenIdSupply   ID of the supply token (ERC-1155)\r\n     * @param _issuer          Address of the token's issuer\r\n     * @param _holder          Address of the recipient of the voucher (ERC-721)\r\n     * @param _correlationId           ID of the current interaction with the smart contract for a specific user\r\n     */\r\n    function fillOrder(\r\n        uint256 _tokenIdSupply,\r\n        address _issuer,\r\n        address _holder,\r\n        uint256 _correlationId\r\n    ) external override onlyFromRouter {\r\n        //checks\r\n        checkOrderFillable(_tokenIdSupply, _issuer, _holder);\r\n\r\n        //close order\r\n        uint256 voucherTokenId = extract721(_issuer, _holder, _tokenIdSupply);\r\n\r\n        emit LogVoucherDelivered(\r\n            _tokenIdSupply,\r\n            voucherTokenId,\r\n            _issuer,\r\n            _holder,\r\n            getPromiseIdFromVoucherId(voucherTokenId),\r\n            _correlationId\r\n        );\r\n    }\r\n\r\n    /**\r\n     * @notice Check order is fillable\r\n     * @dev Will throw if checks don't pass\r\n     * @param _tokenIdSupply  ID of the supply token\r\n     * @param _issuer  Address of the token's issuer\r\n     * @param _holder  Address of the recipient of the voucher (ERC-721)\r\n     */\r\n    function checkOrderFillable(\r\n        uint256 _tokenIdSupply,\r\n        address _issuer,\r\n        address _holder\r\n    ) internal view {\r\n        require(_tokenIdSupply != 0, \"UNSPECIFIED_ID\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n\r\n        if (_holder.isContract()) {\r\n            require(\r\n                IERC165(_holder).supportsInterface(0x150b7a02),\r\n                \"UNSUPPORTED_ERC721_RECEIVED\"\r\n            ); //hex\"31\"\r\n            //bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))\r\n        }\r\n\r\n        require(_holder != address(0), \"UNSPECIFIED_ADDRESS\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n        require(\r\n            IERC1155(tokensContract).balanceOf(_issuer, _tokenIdSupply) > 0,\r\n            \"OFFER_EMPTY\"\r\n        ); //hex\"40\" FISSION.code(FISSION.Category.Availability, FISSION.Status.Unavailable)\r\n\r\n        bytes32 promiseKey = ordersPromise[_tokenIdSupply];\r\n\r\n        require(\r\n            promises[promiseKey].validTo >= block.timestamp,\r\n            \"OFFER_EXPIRED\"\r\n        );\r\n    }\r\n\r\n    /**\r\n     * @notice Extract a standard non-fungible token ERC-721 from a supply stored in ERC-1155\r\n     * @dev Token ID is derived following the same principles for both ERC-1155 and ERC-721\r\n     * @param _issuer          The address of the token issuer\r\n     * @param _to              The address of the token holder\r\n     * @param _tokenIdSupply   ID of the token type\r\n     * @return                 ID of the voucher token\r\n     */\r\n    function extract721(\r\n        address _issuer,\r\n        address _to,\r\n        uint256 _tokenIdSupply\r\n    ) internal returns (uint256) {\r\n        if (_to.isContract()) {\r\n            require(\r\n                ERC721TokenReceiver(_to).onERC721Received(\r\n                    _issuer,\r\n                    msg.sender,\r\n                    _tokenIdSupply,\r\n                    \"\"\r\n                ) == ERC721TokenReceiver(_to).onERC721Received.selector,\r\n                \"UNSUPPORTED_ERC721_RECEIVED\"\r\n            ); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n            //bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))\r\n        }\r\n\r\n        IERC1155ERC721(tokensContract).burn(_issuer, _tokenIdSupply, 1); // This is hardcoded as 1 on purpose\r\n\r\n        //calculate tokenId\r\n        uint256 voucherTokenId =\r\n            _tokenIdSupply | ++typeCounters[_tokenIdSupply];\r\n\r\n        //set status\r\n        vouchersStatus[voucherTokenId].status = setChange(\r\n            vouchersStatus[voucherTokenId].status,\r\n            IDX_COMMIT\r\n        );\r\n        vouchersStatus[voucherTokenId].isPaymentReleased = false;\r\n        vouchersStatus[voucherTokenId].isDepositsReleased = false;\r\n\r\n        //mint voucher NFT as ERC-721\r\n        IERC1155ERC721(tokensContract).mint(_to, voucherTokenId);\r\n\r\n        return voucherTokenId;\r\n    }\r\n\r\n    /**\r\n     * @notice Extract a standard non-fungible tokens ERC-721 from a supply stored in ERC-1155\r\n     * @dev Token ID is derived following the same principles for both ERC-1155 and ERC-721\r\n     * @param _issuer          The address of the token issuer\r\n     * @param _tokenIdSupply   ID of the token type\r\n     * @param _qty   qty that should be burned\r\n     */\r\n    function burnSupplyOnPause(\r\n        address _issuer,\r\n        uint256 _tokenIdSupply,\r\n        uint256 _qty\r\n    ) external override whenPaused onlyFromCashier {\r\n        IERC1155ERC721(tokensContract).burn(_issuer, _tokenIdSupply, _qty);\r\n    }\r\n\r\n    /**\r\n     * @notice Creating a new token type, serving as the base for tokenID generation for NFTs, and a de facto ID for FTs.\r\n     * @param _isNonFungible   Flag for generating NFT or FT\r\n     * @return _tokenType   Returns a newly generated token type\r\n     */\r\n    function generateTokenType(bool _isNonFungible)\r\n        internal\r\n        returns (uint256 _tokenType)\r\n    {\r\n        typeId++;\r\n\r\n        if (_isNonFungible) {\r\n            _tokenType = TYPE_NF_BIT | (typeId << 128); //upper bit is 1, followed by sequence, leaving lower 128-bits as 0\r\n        } else {\r\n            _tokenType = typeId << 128; //upper bit is not set, followed by sequence, leaving lower 128-bits as 0\r\n        }\r\n\r\n        return _tokenType;\r\n    }\r\n\r\n    /* solhint-disable */\r\n\r\n    /**\r\n     * @notice Redemption of the vouchers promise\r\n     * @param _tokenIdVoucher   ID of the voucher\r\n     * @param _msgSender   account called the fn from the BR contract\r\n     */\r\n    function redeem(uint256 _tokenIdVoucher, address _msgSender)\r\n        external\r\n        override\r\n        whenNotPaused\r\n        onlyFromRouter\r\n        onlyVoucherOwner(_tokenIdVoucher, _msgSender)\r\n    {\r\n        //check status\r\n        require(\r\n            isStateCommitted(vouchersStatus[_tokenIdVoucher].status),\r\n            \"ALREADY_PROCESSED\"\r\n        ); //hex\"48\" FISSION.code(FISSION.Category.Availability, FISSION.Status.AlreadyDone)\r\n\r\n        //check validity period\r\n        isInValidityPeriod(_tokenIdVoucher);\r\n        Promise memory tPromise =\r\n            promises[getPromiseIdFromVoucherId(_tokenIdVoucher)];\r\n\r\n        vouchersStatus[_tokenIdVoucher].complainPeriodStart = block.timestamp;\r\n        vouchersStatus[_tokenIdVoucher].status = setChange(\r\n            vouchersStatus[_tokenIdVoucher].status,\r\n            IDX_REDEEM\r\n        );\r\n\r\n        emit LogVoucherRedeemed(\r\n            _tokenIdVoucher,\r\n            _msgSender,\r\n            tPromise.promiseId\r\n        );\r\n    }\r\n\r\n    // // // // // // // //\r\n    // UNHAPPY PATH\r\n    // // // // // // // //\r\n\r\n    /**\r\n     * @notice Refunding a voucher\r\n     * @param _tokenIdVoucher   ID of the voucher\r\n     * @param _msgSender   account called the fn from the BR contract\r\n     */\r\n    function refund(uint256 _tokenIdVoucher, address _msgSender)\r\n        external\r\n        override\r\n        whenNotPaused\r\n        onlyFromRouter\r\n        onlyVoucherOwner(_tokenIdVoucher, _msgSender)\r\n    {\r\n        require(\r\n            isStateCommitted(vouchersStatus[_tokenIdVoucher].status),\r\n            \"INAPPLICABLE_STATUS\"\r\n        ); //hex\"18\" FISSION.code(FISSION.Category.Permission, FISSION.Status.NotApplicableToCurrentState)\r\n\r\n        //check validity period\r\n        isInValidityPeriod(_tokenIdVoucher);\r\n\r\n        vouchersStatus[_tokenIdVoucher].complainPeriodStart = block.timestamp;\r\n        vouchersStatus[_tokenIdVoucher].status = setChange(\r\n            vouchersStatus[_tokenIdVoucher].status,\r\n            IDX_REFUND\r\n        );\r\n\r\n        emit LogVoucherRefunded(_tokenIdVoucher);\r\n    }\r\n\r\n    /**\r\n     * @notice Issue a complain for a voucher\r\n     * @param _tokenIdVoucher   ID of the voucher\r\n     * @param _msgSender   account called the fn from the BR contract\r\n     */\r\n    function complain(uint256 _tokenIdVoucher, address _msgSender)\r\n        external\r\n        override\r\n        whenNotPaused\r\n        onlyFromRouter\r\n        onlyVoucherOwner(_tokenIdVoucher, _msgSender)\r\n    {\r\n        require(\r\n            !isStatus(vouchersStatus[_tokenIdVoucher].status, IDX_COMPLAIN),\r\n            \"ALREADY_COMPLAINED\"\r\n        ); //hex\"48\" FISSION.code(FISSION.Category.Availability, FISSION.Status.AlreadyDone)\r\n        require(\r\n            !isStatus(vouchersStatus[_tokenIdVoucher].status, IDX_FINAL),\r\n            \"ALREADY_FINALIZED\"\r\n        ); //hex\"48\" FISSION.code(FISSION.Category.Availability, FISSION.Status.AlreadyDone)\r\n\r\n        //check if still in the complain period\r\n        Promise memory tPromise =\r\n            promises[getPromiseIdFromVoucherId(_tokenIdVoucher)];\r\n\r\n        //if redeemed or refunded\r\n        if (\r\n            isStateRedemptionSigned(vouchersStatus[_tokenIdVoucher].status) ||\r\n            isStateRefunded(vouchersStatus[_tokenIdVoucher].status)\r\n        ) {\r\n            if (\r\n                !isStatus(\r\n                    vouchersStatus[_tokenIdVoucher].status,\r\n                    IDX_CANCEL_FAULT\r\n                )\r\n            ) {\r\n                require(\r\n                    block.timestamp <=\r\n                        vouchersStatus[_tokenIdVoucher].complainPeriodStart +\r\n                            complainPeriod +\r\n                            cancelFaultPeriod,\r\n                    \"COMPLAINPERIOD_EXPIRED\"\r\n                ); //hex\"46\" FISSION.code(FISSION.Category.Availability, FISSION.Status.Expired)\r\n            } else {\r\n                require(\r\n                    block.timestamp <=\r\n                        vouchersStatus[_tokenIdVoucher].complainPeriodStart +\r\n                            complainPeriod,\r\n                    \"COMPLAINPERIOD_EXPIRED\"\r\n                ); //hex\"46\" FISSION.code(FISSION.Category.Availability, FISSION.Status.Expired)\r\n            }\r\n\r\n            vouchersStatus[_tokenIdVoucher].cancelFaultPeriodStart = block\r\n                .timestamp;\r\n            vouchersStatus[_tokenIdVoucher].status = setChange(\r\n                vouchersStatus[_tokenIdVoucher].status,\r\n                IDX_COMPLAIN\r\n            );\r\n\r\n            emit LogVoucherComplain(_tokenIdVoucher);\r\n\r\n            //if expired\r\n        } else if (isStateExpired(vouchersStatus[_tokenIdVoucher].status)) {\r\n            if (\r\n                !isStatus(\r\n                    vouchersStatus[_tokenIdVoucher].status,\r\n                    IDX_CANCEL_FAULT\r\n                )\r\n            ) {\r\n                require(\r\n                    block.timestamp <=\r\n                        tPromise.validTo + complainPeriod + cancelFaultPeriod,\r\n                    \"COMPLAINPERIOD_EXPIRED\"\r\n                ); //hex\"46\" FISSION.code(FISSION.Category.Availability, FISSION.Status.Expired)\r\n            } else {\r\n                require(\r\n                    block.timestamp <= tPromise.validTo + complainPeriod,\r\n                    \"COMPLAINPERIOD_EXPIRED\"\r\n                ); //hex\"46\" FISSION.code(FISSION.Category.Availability, FISSION.Status.Expired)\r\n            }\r\n\r\n            vouchersStatus[_tokenIdVoucher].cancelFaultPeriodStart = block\r\n                .timestamp;\r\n            vouchersStatus[_tokenIdVoucher].status = setChange(\r\n                vouchersStatus[_tokenIdVoucher].status,\r\n                IDX_COMPLAIN\r\n            );\r\n\r\n            emit LogVoucherComplain(_tokenIdVoucher);\r\n\r\n            //if cancelOrFault\r\n        } else if (\r\n            isStatus(vouchersStatus[_tokenIdVoucher].status, IDX_CANCEL_FAULT)\r\n        ) {\r\n            require(\r\n                block.timestamp <=\r\n                    vouchersStatus[_tokenIdVoucher].complainPeriodStart +\r\n                        complainPeriod,\r\n                \"COMPLAINPERIOD_EXPIRED\"\r\n            ); //hex\"46\" FISSION.code(FISSION.Category.Availability, FISSION.Status.Expired));\r\n\r\n            vouchersStatus[_tokenIdVoucher].status = setChange(\r\n                vouchersStatus[_tokenIdVoucher].status,\r\n                IDX_COMPLAIN\r\n            );\r\n\r\n            emit LogVoucherComplain(_tokenIdVoucher);\r\n        } else {\r\n            revert(\"INAPPLICABLE_STATUS\"); //hex\"18\" FISSION.code(FISSION.Category.Permission, FISSION.Status.NotApplicableToCurrentState)\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @notice Cancel/Fault transaction by the Seller, admitting to a fault or backing out of the deal\r\n     * @param _tokenIdVoucher   ID of the voucher\r\n     */\r\n    function cancelOrFault(uint256 _tokenIdVoucher, address _msgSender)\r\n        external\r\n        override\r\n        whenNotPaused\r\n    {\r\n        uint256 tokenIdSupply = getIdSupplyFromVoucher(_tokenIdVoucher);\r\n        require(\r\n            getSupplyHolder(tokenIdSupply) == _msgSender,\r\n            \"UNAUTHORIZED_COF\"\r\n        ); //hex\"10\" FISSION.code(FISSION.Category.Permission, FISSION.Status.Disallowed_Stop)\r\n\r\n        uint8 tStatus = vouchersStatus[_tokenIdVoucher].status;\r\n\r\n        require(!isStatus(tStatus, IDX_CANCEL_FAULT), \"ALREADY_CANCELFAULT\"); //hex\"48\" FISSION.code(FISSION.Category.Availability, FISSION.Status.AlreadyDone)\r\n        require(!isStatus(tStatus, IDX_FINAL), \"ALREADY_FINALIZED\"); //hex\"48\" FISSION.code(FISSION.Category.Availability, FISSION.Status.AlreadyDone)\r\n\r\n        Promise memory tPromise =\r\n            promises[getPromiseIdFromVoucherId(_tokenIdVoucher)];\r\n\r\n        if (isStatus(tStatus, IDX_REDEEM) || isStatus(tStatus, IDX_REFUND)) {\r\n            //if redeemed or refunded\r\n            if (!isStatus(tStatus, IDX_COMPLAIN)) {\r\n                require(\r\n                    block.timestamp <=\r\n                        vouchersStatus[_tokenIdVoucher].complainPeriodStart +\r\n                            complainPeriod +\r\n                            cancelFaultPeriod,\r\n                    \"COFPERIOD_EXPIRED\"\r\n                ); //hex\"46\" FISSION.code(FISSION.Category.Availability, FISSION.Status.Expired)\r\n                vouchersStatus[_tokenIdVoucher].complainPeriodStart = block\r\n                    .timestamp; //resetting the complain period\r\n            } else {\r\n                require(\r\n                    block.timestamp <=\r\n                        vouchersStatus[_tokenIdVoucher].cancelFaultPeriodStart +\r\n                            cancelFaultPeriod,\r\n                    \"COFPERIOD_EXPIRED\"\r\n                ); //hex\"46\" FISSION.code(FISSION.Category.Availability, FISSION.Status.Expired)\r\n            }\r\n        } else if (isStatus(tStatus, IDX_EXPIRE)) {\r\n            //if expired\r\n            if (!isStatus(tStatus, IDX_COMPLAIN)) {\r\n                require(\r\n                    block.timestamp <=\r\n                        tPromise.validTo + complainPeriod + cancelFaultPeriod,\r\n                    \"COFPERIOD_EXPIRED\"\r\n                ); //hex\"46\" FISSION.code(FISSION.Category.Availability, FISSION.Status.Expired)\r\n            } else {\r\n                require(\r\n                    block.timestamp <=\r\n                        vouchersStatus[_tokenIdVoucher].cancelFaultPeriodStart +\r\n                            cancelFaultPeriod,\r\n                    \"COFPERIOD_EXPIRED\"\r\n                ); //hex\"46\" FISSION.code(FISSION.Category.Availability, FISSION.Status.Expired)\r\n            }\r\n        } else if (isStateCommitted(tStatus)) {\r\n            //if committed only\r\n            require(\r\n                block.timestamp <=\r\n                    tPromise.validTo + complainPeriod + cancelFaultPeriod,\r\n                \"COFPERIOD_EXPIRED\"\r\n            ); //hex\"46\" FISSION.code(FISSION.Category.Availability, FISSION.Status.Expired)\r\n            vouchersStatus[_tokenIdVoucher].complainPeriodStart = block.timestamp; //complain period starts\r\n        } else {\r\n            revert(\"INAPPLICABLE_STATUS\"); //hex\"18\" FISSION.code(FISSION.Category.Permission, FISSION.Status.NotApplicableToCurrentState)\r\n        }\r\n\r\n        vouchersStatus[_tokenIdVoucher].status = setChange(\r\n            tStatus,\r\n            IDX_CANCEL_FAULT\r\n        );\r\n\r\n        emit LogVoucherFaultCancel(_tokenIdVoucher);\r\n    }\r\n\r\n    /**\r\n     * @notice Cancel/Fault transaction by the Seller, cancelling the remaining uncommitted voucher set so that seller prevents buyers from committing to vouchers for items no longer in exchange.\r\n     * @param _tokenIdSupply   ID of the voucher set\r\n     * @param _issuer   owner of the voucher\r\n     */\r\n    function cancelOrFaultVoucherSet(uint256 _tokenIdSupply, address _issuer)\r\n        external\r\n        override\r\n        onlyFromRouter\r\n        whenNotPaused\r\n        returns (uint256)\r\n    {\r\n        require(getSupplyHolder(_tokenIdSupply) == _issuer, \"UNAUTHORIZED_COF\");\r\n\r\n        uint256 remQty = getRemQtyForSupply(_tokenIdSupply, _issuer);\r\n\r\n        require(remQty > 0, \"OFFER_EMPTY\");\r\n\r\n        IERC1155ERC721(tokensContract).burn(_issuer, _tokenIdSupply, remQty);\r\n\r\n        emit LogVoucherSetFaultCancel(_tokenIdSupply, _issuer);\r\n\r\n        return remQty;\r\n    }\r\n\r\n    // // // // // // // //\r\n    // BACK-END PROCESS\r\n    // // // // // // // //\r\n\r\n    /**\r\n     * @notice Mark voucher token that the payment was released\r\n     * @param _tokenIdVoucher   ID of the voucher token\r\n     */\r\n    function setPaymentReleased(uint256 _tokenIdVoucher)\r\n        external\r\n        override\r\n        onlyFromCashier\r\n    {\r\n        require(_tokenIdVoucher != 0, \"UNSPECIFIED_ID\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n        vouchersStatus[_tokenIdVoucher].isPaymentReleased = true;\r\n\r\n        emit LogFundsReleased(_tokenIdVoucher, 0);\r\n    }\r\n\r\n    /**\r\n     * @notice Mark voucher token that the deposits were released\r\n     * @param _tokenIdVoucher   ID of the voucher token\r\n     */\r\n    function setDepositsReleased(uint256 _tokenIdVoucher)\r\n        external\r\n        override\r\n        onlyFromCashier\r\n    {\r\n        require(_tokenIdVoucher != 0, \"UNSPECIFIED_ID\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n        vouchersStatus[_tokenIdVoucher].isDepositsReleased = true;\r\n\r\n        emit LogFundsReleased(_tokenIdVoucher, 1);\r\n    }\r\n\r\n    /**\r\n     * @notice Mark voucher token as expired\r\n     * @param _tokenIdVoucher   ID of the voucher token\r\n     */\r\n    function triggerExpiration(uint256 _tokenIdVoucher) external override {\r\n        require(_tokenIdVoucher != 0, \"UNSPECIFIED_ID\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n\r\n        Promise memory tPromise =\r\n            promises[getPromiseIdFromVoucherId(_tokenIdVoucher)];\r\n\r\n        if (\r\n            tPromise.validTo < block.timestamp &&\r\n            isStateCommitted(vouchersStatus[_tokenIdVoucher].status)\r\n        ) {\r\n            vouchersStatus[_tokenIdVoucher].status = setChange(\r\n                vouchersStatus[_tokenIdVoucher].status,\r\n                IDX_EXPIRE\r\n            );\r\n\r\n            emit LogExpirationTriggered(_tokenIdVoucher, msg.sender);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @notice Mark voucher token to the final status\r\n     * @param _tokenIdVoucher   ID of the voucher token\r\n     */\r\n    function triggerFinalizeVoucher(uint256 _tokenIdVoucher) external override {\r\n        require(_tokenIdVoucher != 0, \"UNSPECIFIED_ID\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n\r\n        uint8 tStatus = vouchersStatus[_tokenIdVoucher].status;\r\n\r\n        require(!isStatus(tStatus, IDX_FINAL), \"ALREADY_FINALIZED\"); //hex\"48\" FISSION.code(FISSION.Category.Availability, FISSION.Status.AlreadyDone)\r\n\r\n        bool mark;\r\n        Promise memory tPromise =\r\n            promises[getPromiseIdFromVoucherId(_tokenIdVoucher)];\r\n\r\n        if (isStatus(tStatus, IDX_COMPLAIN)) {\r\n            if (isStatus(tStatus, IDX_CANCEL_FAULT)) {\r\n                //if COMPLAIN && COF: then final\r\n                mark = true;\r\n            } else if (\r\n                block.timestamp >=\r\n                vouchersStatus[_tokenIdVoucher].cancelFaultPeriodStart +\r\n                    cancelFaultPeriod\r\n            ) {\r\n                //if COMPLAIN: then final after cof period\r\n                mark = true;\r\n            }\r\n        } else if (\r\n            isStatus(tStatus, IDX_CANCEL_FAULT) &&\r\n            block.timestamp >=\r\n            vouchersStatus[_tokenIdVoucher].complainPeriodStart + complainPeriod\r\n        ) {\r\n            //if COF: then final after complain period\r\n            mark = true;\r\n        } else if (\r\n            isStateRedemptionSigned(tStatus) || isStateRefunded(tStatus)\r\n        ) {\r\n            //if RDM/RFND NON_COMPLAIN: then final after complainPeriodStart + complainPeriod\r\n            if (\r\n                block.timestamp >=\r\n                vouchersStatus[_tokenIdVoucher].complainPeriodStart +\r\n                    complainPeriod\r\n            ) {\r\n                mark = true;\r\n            }\r\n        } else if (isStateExpired(tStatus)) {\r\n            //if EXP NON_COMPLAIN: then final after validTo + complainPeriod\r\n            if (block.timestamp >= tPromise.validTo + complainPeriod) {\r\n                mark = true;\r\n            }\r\n        }\r\n\r\n        if (mark) {\r\n            vouchersStatus[_tokenIdVoucher].status = setChange(\r\n                tStatus,\r\n                IDX_FINAL\r\n            );\r\n            emit LogFinalizeVoucher(_tokenIdVoucher, msg.sender);\r\n        }\r\n    }\r\n\r\n    /* solhint-enable */\r\n\r\n    // // // // // // // //\r\n    // UTILS\r\n    // // // // // // // //\r\n\r\n    /**\r\n     * @notice Set the address of the new holder of a _tokenIdSupply on transfer\r\n     * @param _tokenIdSupply   _tokenIdSupply which will be transferred\r\n     * @param _newSeller   new holder of the supply\r\n     */\r\n    function setSupplyHolderOnTransfer(\r\n        uint256 _tokenIdSupply,\r\n        address _newSeller\r\n    ) external override onlyFromRouter {\r\n        bytes32 promiseKey = ordersPromise[_tokenIdSupply];\r\n        promises[promiseKey].seller = _newSeller;\r\n    }\r\n\r\n    /**\r\n     * @notice Set the address of the Boson Router contract\r\n     * @param _bosonRouterAddress   The address of the BR contract\r\n     */\r\n    function setBosonRouterAddress(address _bosonRouterAddress)\r\n        external\r\n        onlyOwner\r\n    {\r\n        require(_bosonRouterAddress != address(0), \"UNSPECIFIED_ADDRESS\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n\r\n        bosonRouterAddress = _bosonRouterAddress;\r\n\r\n        emit LogBosonRouterSet(_bosonRouterAddress, msg.sender);\r\n    }\r\n\r\n    /**\r\n     * @notice Set the address of the Cashier contract\r\n     * @param _cashierAddress   The address of the BR contract\r\n     */\r\n    function setCashierAddress(address _cashierAddress)\r\n        external\r\n        override\r\n        onlyOwner\r\n    {\r\n        require(_cashierAddress != address(0), \"UNSPECIFIED_ADDRESS\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n\r\n        cashierAddress = _cashierAddress;\r\n\r\n        emit LogCashierSet(_cashierAddress, msg.sender);\r\n    }\r\n\r\n    /**\r\n     * @notice Set the general complain period, should be used sparingly as it has significant consequences. Here done simply for demo purposes.\r\n     * @param _complainPeriod   the new value for complain period (in number of seconds)\r\n     */\r\n    function setComplainPeriod(uint256 _complainPeriod)\r\n        external\r\n        override\r\n        onlyOwner\r\n    {\r\n        complainPeriod = _complainPeriod;\r\n\r\n        emit LogComplainPeriodChanged(_complainPeriod, msg.sender);\r\n    }\r\n\r\n    /**\r\n     * @notice Set the general cancelOrFault period, should be used sparingly as it has significant consequences. Here done simply for demo purposes.\r\n     * @param _cancelFaultPeriod   the new value for cancelOrFault period (in number of seconds)\r\n     */\r\n    function setCancelFaultPeriod(uint256 _cancelFaultPeriod)\r\n        external\r\n        override\r\n        onlyOwner\r\n    {\r\n        cancelFaultPeriod = _cancelFaultPeriod;\r\n\r\n        emit LogCancelFaultPeriodChanged(_cancelFaultPeriod, msg.sender);\r\n    }\r\n\r\n    // // // // // // // //\r\n    // GETTERS\r\n    // // // // // // // //\r\n\r\n    /**\r\n     * @notice Get the promise ID at specific index\r\n     * @param _idx  Index in the array of promise keys\r\n     * @return      Promise ID\r\n     */\r\n    function getPromiseKey(uint256 _idx)\r\n        public\r\n        view\r\n        override\r\n        returns (bytes32)\r\n    {\r\n        return promiseKeys[_idx];\r\n    }\r\n\r\n    /**\r\n     * @notice Get the supply token ID from a voucher token\r\n     * @param _tokenIdVoucher   ID of the voucher token\r\n     * @return                  ID of the supply token\r\n     */\r\n    function getIdSupplyFromVoucher(uint256 _tokenIdVoucher)\r\n        public\r\n        pure\r\n        override\r\n        returns (uint256)\r\n    {\r\n        return _tokenIdVoucher & MASK_TYPE;\r\n    }\r\n\r\n    /**\r\n     * @notice Get the promise ID from a voucher token\r\n     * @param _tokenIdVoucher   ID of the voucher token\r\n     * @return                  ID of the promise\r\n     */\r\n    function getPromiseIdFromVoucherId(uint256 _tokenIdVoucher)\r\n        public\r\n        view\r\n        override\r\n        returns (bytes32)\r\n    {\r\n        require(_tokenIdVoucher != 0, \"UNSPECIFIED_ID\"); //hex\"20\" FISSION.code(FISSION.Category.Find, FISSION.Status.NotFound_Unequal_OutOfRange)\r\n\r\n        uint256 tokenIdSupply = getIdSupplyFromVoucher(_tokenIdVoucher);\r\n        return promises[ordersPromise[tokenIdSupply]].promiseId;\r\n    }\r\n\r\n    /**\r\n     * @notice Get the remaining quantity left in supply of tokens (e.g ERC-721 left in ERC-1155) of an account\r\n     * @param _tokenSupplyId  Token supply ID\r\n     * @param _owner    holder of the Token Supply\r\n     * @return          remaining quantity\r\n     */\r\n    function getRemQtyForSupply(uint256 _tokenSupplyId, address _owner)\r\n        public\r\n        view\r\n        override\r\n        returns (uint256)\r\n    {\r\n        return IERC1155(tokensContract).balanceOf(_owner, _tokenSupplyId);\r\n    }\r\n\r\n    /**\r\n     * @notice Get all necessary funds for a supply token\r\n     * @param _tokenIdSupply   ID of the supply token\r\n     * @return                  returns a tuple (Payment amount, Seller's deposit, Buyer's deposit)\r\n     */\r\n    function getOrderCosts(uint256 _tokenIdSupply)\r\n        public\r\n        view\r\n        override\r\n        returns (\r\n            uint256,\r\n            uint256,\r\n            uint256\r\n        )\r\n    {\r\n        bytes32 promiseKey = ordersPromise[_tokenIdSupply];\r\n        return (\r\n            promises[promiseKey].price,\r\n            promises[promiseKey].depositSe,\r\n            promises[promiseKey].depositBu\r\n        );\r\n    }\r\n\r\n    /**\r\n     * @notice Get Buyer costs required to make an order for a supply token\r\n     * @param _tokenIdSupply   ID of the supply token\r\n     * @return                  returns a tuple (Payment amount, Buyer's deposit)\r\n     */\r\n    function getBuyerOrderCosts(uint256 _tokenIdSupply)\r\n        public\r\n        view\r\n        override\r\n        returns (uint256, uint256)\r\n    {\r\n        bytes32 promiseKey = ordersPromise[_tokenIdSupply];\r\n        return (promises[promiseKey].price, promises[promiseKey].depositBu);\r\n    }\r\n\r\n    /**\r\n     * @notice Get Seller deposit\r\n     * @param _tokenIdSupply   ID of the supply token\r\n     * @return                  returns sellers deposit\r\n     */\r\n    function getSellerDeposit(uint256 _tokenIdSupply)\r\n        public\r\n        view\r\n        override\r\n        returns (uint256)\r\n    {\r\n        bytes32 promiseKey = ordersPromise[_tokenIdSupply];\r\n        return promises[promiseKey].depositSe;\r\n    }\r\n\r\n    /**\r\n     * @notice Get the current status of a voucher\r\n     * @param _tokenIdVoucher   ID of the voucher token\r\n     * @return                  Status of the voucher (via enum)\r\n     */\r\n    function getVoucherStatus(uint256 _tokenIdVoucher)\r\n        public\r\n        view\r\n        override\r\n        returns (\r\n            uint8,\r\n            bool,\r\n            bool\r\n        )\r\n    {\r\n        return (\r\n            vouchersStatus[_tokenIdVoucher].status,\r\n            vouchersStatus[_tokenIdVoucher].isPaymentReleased,\r\n            vouchersStatus[_tokenIdVoucher].isDepositsReleased\r\n        );\r\n    }\r\n\r\n    /**\r\n     * @notice Get the holder of a voucher\r\n     * @param _tokenIdVoucher   ID of the voucher token\r\n     * @return                  Address of the holder\r\n     */\r\n    function getVoucherHolder(uint256 _tokenIdVoucher)\r\n        public\r\n        view\r\n        override\r\n        returns (address)\r\n    {\r\n        return IERC721(tokensContract).ownerOf(_tokenIdVoucher);\r\n    }\r\n\r\n    /**\r\n     * @notice Get the holder of a supply\r\n     * @param _tokenIdSupply        ID of a promise which is mapped to the corresponding Promise\r\n     * @return                  Address of the holder\r\n     */\r\n    function getSupplyHolder(uint256 _tokenIdSupply)\r\n        public\r\n        view\r\n        override\r\n        returns (address)\r\n    {\r\n        bytes32 promiseKey = ordersPromise[_tokenIdSupply];\r\n        return promises[promiseKey].seller;\r\n    }\r\n\r\n    /**\r\n     * @notice Get the address of the token where the price for the supply is held\r\n     * @param _tokenIdSupply   ID of the voucher supply token\r\n     * @return                  Address of the token\r\n     */\r\n    function getVoucherPriceToken(uint256 _tokenIdSupply)\r\n        public\r\n        view\r\n        override\r\n        returns (address)\r\n    {\r\n        return paymentDetails[_tokenIdSupply].addressTokenPrice;\r\n    }\r\n\r\n    /**\r\n     * @notice Get the address of the token where the deposits for the supply are held\r\n     * @param _tokenIdSupply   ID of the voucher supply token\r\n     * @return                  Address of the token\r\n     */\r\n    function getVoucherDepositToken(uint256 _tokenIdSupply)\r\n        public\r\n        view\r\n        override\r\n        returns (address)\r\n    {\r\n        return paymentDetails[_tokenIdSupply].addressTokenDeposits;\r\n    }\r\n\r\n    /**\r\n     * @notice Get the payment method for a particular _tokenIdSupply\r\n     * @param _tokenIdSupply   ID of the voucher supply token\r\n     * @return                  payment method\r\n     */\r\n    function getVoucherPaymentMethod(uint256 _tokenIdSupply)\r\n        public\r\n        view\r\n        override\r\n        returns (uint8)\r\n    {\r\n        return paymentDetails[_tokenIdSupply].paymentMethod;\r\n    }\r\n\r\n    /**\r\n     * @notice Checks whether a voucher is in valid period for redemption (between start date and end date)\r\n     * @param _tokenIdVoucher ID of the voucher token\r\n     */\r\n    function isInValidityPeriod(uint256 _tokenIdVoucher)\r\n        public\r\n        view\r\n        override\r\n        returns (bool)\r\n    {\r\n        //check validity period\r\n        Promise memory tPromise =\r\n            promises[getPromiseIdFromVoucherId(_tokenIdVoucher)];\r\n        require(tPromise.validFrom <= block.timestamp, \"INVALID_VALIDITY_FROM\"); //hex\"26\" FISSION.code(FISSION.Category.Find, FISSION.Status.Above_Range_Overflow)\r\n        require(tPromise.validTo >= block.timestamp, \"INVALID_VALIDITY_TO\"); //hex\"24\" FISSION.code(FISSION.Category.Find, FISSION.Status.BelowRange_Underflow)\r\n\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * @notice Checks whether a voucher is in valid state to be transferred. If either payments or deposits are released, voucher could not be transferred\r\n     * @param _tokenIdVoucher ID of the voucher token\r\n     */\r\n    function isVoucherTransferable(uint256 _tokenIdVoucher) public override view returns (bool) {\r\n        return !(\r\n            vouchersStatus[_tokenIdVoucher].isPaymentReleased || \r\n            vouchersStatus[_tokenIdVoucher].isDepositsReleased\r\n        );\r\n    }\r\n}\r\n",
  "sourcePath": "E:/Ludo/Documents/Developpement/BOSON/contracts/contracts/VoucherKernel.sol",
  "ast": {
    "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/VoucherKernel.sol",
    "exportedSymbols": {
      "VoucherKernel": [
        8535
      ]
    },
    "id": 8536,
    "license": "LGPL-3.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6382,
        "literals": [
          "solidity",
          "0.7",
          ".1"
        ],
        "nodeType": "PragmaDirective",
        "src": "49:22:6"
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
        "file": "@openzeppelin/contracts/utils/Address.sol",
        "id": 6383,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 11437,
        "src": "75:51:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 6384,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 10495,
        "src": "128:52:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Pausable.sol",
        "file": "@openzeppelin/contracts/utils/Pausable.sol",
        "id": 6385,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 12044,
        "src": "182:52:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 6386,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 10850,
        "src": "236:51:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155.sol",
        "file": "./interfaces/IERC1155.sol",
        "id": 6387,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 8932,
        "src": "289:35:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC165.sol",
        "file": "./interfaces/IERC165.sol",
        "id": 6388,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 9026,
        "src": "326:34:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC721.sol",
        "file": "./interfaces/IERC721.sol",
        "id": 6389,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 9251,
        "src": "362:34:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155ERC721.sol",
        "file": "./interfaces/IERC1155ERC721.sol",
        "id": 6390,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 8976,
        "src": "398:41:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC721TokenReceiver.sol",
        "file": "./interfaces/IERC721TokenReceiver.sol",
        "id": 6391,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 9269,
        "src": "441:47:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IVoucherKernel.sol",
        "file": "./interfaces/IVoucherKernel.sol",
        "id": 6392,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 9589,
        "src": "490:41:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/UsingHelpers.sol",
        "file": "./UsingHelpers.sol",
        "id": 6393,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 6381,
        "src": "533:28:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 6395,
              "name": "IVoucherKernel",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9588,
              "src": "1195:14:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IVoucherKernel_$9588",
                "typeString": "contract IVoucherKernel"
              }
            },
            "id": 6396,
            "nodeType": "InheritanceSpecifier",
            "src": "1195:14:6"
          },
          {
            "baseName": {
              "id": 6397,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10494,
              "src": "1211:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$10494",
                "typeString": "contract Ownable"
              }
            },
            "id": 6398,
            "nodeType": "InheritanceSpecifier",
            "src": "1211:7:6"
          },
          {
            "baseName": {
              "id": 6399,
              "name": "Pausable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12043,
              "src": "1220:8:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Pausable_$12043",
                "typeString": "contract Pausable"
              }
            },
            "id": 6400,
            "nodeType": "InheritanceSpecifier",
            "src": "1220:8:6"
          },
          {
            "baseName": {
              "id": 6401,
              "name": "UsingHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6380,
              "src": "1230:12:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_UsingHelpers_$6380",
                "typeString": "contract UsingHelpers"
              }
            },
            "id": 6402,
            "nodeType": "InheritanceSpecifier",
            "src": "1230:12:6"
          }
        ],
        "contractDependencies": [
          6380,
          9588,
          10494,
          11459,
          12043
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 6394,
          "nodeType": "StructuredDocumentation",
          "src": "612:525:6",
          "text": " @title VoucherKernel contract is controlling the core business logic\n @dev Notes:\n  - Since this is a reference app, it is not yet optimized.\n      In the next phase, the bulk raw data will be packed into a single bytes32 field and/or pushed off-chain.\n  - The usage of block.timestamp is honored since vouchers are defined currently with day-precision.\n      See: https://ethereum.stackexchange.com/questions/5924/how-do-ethereum-mining-nodes-maintain-a-time-consistent-with-the-network/5931#5931"
        },
        "fullyImplemented": true,
        "id": 8535,
        "linearizedBaseContracts": [
          8535,
          6380,
          12043,
          10494,
          11459,
          9588
        ],
        "name": "VoucherKernel",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 6405,
            "libraryName": {
              "id": 6403,
              "name": "Address",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11436,
              "src": "1256:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Address_$11436",
                "typeString": "library Address"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1250:26:6",
            "typeName": {
              "id": 6404,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1268:7:6",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 6408,
            "libraryName": {
              "id": 6406,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10849,
              "src": "1288:8:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$10849",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1282:27:6",
            "typeName": {
              "id": 6407,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1301:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "functionSelector": "7518fa98",
            "id": 6410,
            "mutability": "mutable",
            "name": "tokensContract",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "1353:29:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6409,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1353:7:6",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "canonicalName": "VoucherKernel.Promise",
            "id": 6429,
            "members": [
              {
                "constant": false,
                "id": 6412,
                "mutability": "mutable",
                "name": "promiseId",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1496:17:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 6411,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1496:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6414,
                "mutability": "mutable",
                "name": "nonce",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1524:13:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 6413,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1524:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6416,
                "mutability": "mutable",
                "name": "seller",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1576:14:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 6415,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1576:7:6",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6418,
                "mutability": "mutable",
                "name": "validFrom",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1757:17:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 6417,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1757:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6420,
                "mutability": "mutable",
                "name": "validTo",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1785:15:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 6419,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1785:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6422,
                "mutability": "mutable",
                "name": "price",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1811:13:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 6421,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1811:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6424,
                "mutability": "mutable",
                "name": "depositSe",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1835:17:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 6423,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1835:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6426,
                "mutability": "mutable",
                "name": "depositBu",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1863:17:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 6425,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1863:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6428,
                "mutability": "mutable",
                "name": "idx",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1891:11:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 6427,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1891:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Promise",
            "nodeType": "StructDefinition",
            "scope": 8535,
            "src": "1470:440:6",
            "visibility": "public"
          },
          {
            "canonicalName": "VoucherKernel.VoucherPaymentMethod",
            "id": 6436,
            "members": [
              {
                "constant": false,
                "id": 6431,
                "mutability": "mutable",
                "name": "paymentMethod",
                "nodeType": "VariableDeclaration",
                "scope": 6436,
                "src": "1957:19:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 6430,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "1957:5:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6433,
                "mutability": "mutable",
                "name": "addressTokenPrice",
                "nodeType": "VariableDeclaration",
                "scope": 6436,
                "src": "1987:25:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 6432,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1987:7:6",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6435,
                "mutability": "mutable",
                "name": "addressTokenDeposits",
                "nodeType": "VariableDeclaration",
                "scope": 6436,
                "src": "2023:28:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 6434,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2023:7:6",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "VoucherPaymentMethod",
            "nodeType": "StructDefinition",
            "scope": 8535,
            "src": "1918:141:6",
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8cfb578e",
            "id": 6438,
            "mutability": "mutable",
            "name": "bosonRouterAddress",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2067:33:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6437,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "2067:7:6",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "4f755c3e",
            "id": 6440,
            "mutability": "mutable",
            "name": "cashierAddress",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2146:29:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6439,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "2146:7:6",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "cc2f84cb",
            "id": 6444,
            "mutability": "mutable",
            "name": "promises",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2218:43:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
              "typeString": "mapping(bytes32 => struct VoucherKernel.Promise)"
            },
            "typeName": {
              "id": 6443,
              "keyType": {
                "id": 6441,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2226:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2218:27:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                "typeString": "mapping(bytes32 => struct VoucherKernel.Promise)"
              },
              "valueType": {
                "id": 6442,
                "name": "Promise",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 6429,
                "src": "2237:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Promise_$6429_storage_ptr",
                  "typeString": "struct VoucherKernel.Promise"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "817b3084",
            "id": 6448,
            "mutability": "mutable",
            "name": "tokenNonces",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2308:46:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 6447,
              "keyType": {
                "id": 6445,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2316:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2308:27:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 6446,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2327:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "e5d5f9ac",
            "id": 6452,
            "mutability": "mutable",
            "name": "paymentDetails",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2500:62:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherPaymentMethod_$6436_storage_$",
              "typeString": "mapping(uint256 => struct VoucherKernel.VoucherPaymentMethod)"
            },
            "typeName": {
              "id": 6451,
              "keyType": {
                "id": 6449,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2508:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "2500:40:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherPaymentMethod_$6436_storage_$",
                "typeString": "mapping(uint256 => struct VoucherKernel.VoucherPaymentMethod)"
              },
              "valueType": {
                "id": 6450,
                "name": "VoucherPaymentMethod",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 6436,
                "src": "2519:20:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_VoucherPaymentMethod_$6436_storage_ptr",
                  "typeString": "struct VoucherKernel.VoucherPaymentMethod"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "16ed9e0e",
            "id": 6455,
            "mutability": "mutable",
            "name": "promiseKeys",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2612:28:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
              "typeString": "bytes32[]"
            },
            "typeName": {
              "baseType": {
                "id": 6453,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2612:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "id": 6454,
              "nodeType": "ArrayTypeName",
              "src": "2612:9:6",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                "typeString": "bytes32[]"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "75a83102",
            "id": 6459,
            "mutability": "mutable",
            "name": "ordersPromise",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2649:48:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
              "typeString": "mapping(uint256 => bytes32)"
            },
            "typeName": {
              "id": 6458,
              "keyType": {
                "id": 6456,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2657:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "2649:27:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                "typeString": "mapping(uint256 => bytes32)"
              },
              "valueType": {
                "id": 6457,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2668:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "ec29c17d",
            "id": 6463,
            "mutability": "mutable",
            "name": "vouchersStatus",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2780:55:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
              "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus)"
            },
            "typeName": {
              "id": 6462,
              "keyType": {
                "id": 6460,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2788:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "2780:33:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus)"
              },
              "valueType": {
                "id": 6461,
                "name": "VoucherStatus",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 6268,
                "src": "2799:13:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage_ptr",
                  "typeString": "struct UsingHelpers.VoucherStatus"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 6469,
            "mutability": "mutable",
            "name": "balances",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2900:64:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(uint256 => mapping(address => uint256))"
            },
            "typeName": {
              "id": 6468,
              "keyType": {
                "id": 6464,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2908:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "2900:47:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(uint256 => mapping(address => uint256))"
              },
              "valueType": {
                "id": 6467,
                "keyType": {
                  "id": 6465,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2927:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "2919:27:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 6466,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2938:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 6475,
            "mutability": "mutable",
            "name": "operatorApprovals",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "3008:70:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
              "typeString": "mapping(address => mapping(address => bool))"
            },
            "typeName": {
              "id": 6474,
              "keyType": {
                "id": 6470,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "3016:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "3008:44:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                "typeString": "mapping(address => mapping(address => bool))"
              },
              "valueType": {
                "id": 6473,
                "keyType": {
                  "id": 6471,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3035:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "3027:24:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "valueType": {
                  "id": 6472,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "3046:4:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "functionSelector": "99c849b8",
            "id": 6479,
            "mutability": "mutable",
            "name": "typeCounters",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "3140:47:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 6478,
              "keyType": {
                "id": 6476,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "3148:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "3140:27:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueType": {
                "id": 6477,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "3159:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "7ed06c44",
            "id": 6491,
            "mutability": "constant",
            "name": "MASK_TYPE",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "3239:63:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6480,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "3239:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "commonType": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              },
              "id": 6490,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "arguments": [
                  {
                    "arguments": [
                      {
                        "id": 6486,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "~",
                        "prefix": true,
                        "src": "3291:2:6",
                        "subExpression": {
                          "hexValue": "30",
                          "id": 6485,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3292:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_minus_1_by_1",
                          "typeString": "int_const -1"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_minus_1_by_1",
                          "typeString": "int_const -1"
                        }
                      ],
                      "id": 6484,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "3283:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint128_$",
                        "typeString": "type(uint128)"
                      },
                      "typeName": {
                        "id": 6483,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "3283:7:6",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 6487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3283:11:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  }
                ],
                "expression": {
                  "argumentTypes": [
                    {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  ],
                  "id": 6482,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "ElementaryTypeNameExpression",
                  "src": "3275:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_uint256_$",
                    "typeString": "type(uint256)"
                  },
                  "typeName": {
                    "id": 6481,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3275:7:6",
                    "typeDescriptions": {}
                  }
                },
                "id": 6488,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "typeConversion",
                "lValueRequested": false,
                "names": [],
                "nodeType": "FunctionCall",
                "src": "3275:20:6",
                "tryCall": false,
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "BinaryOperation",
              "operator": "<<",
              "rightExpression": {
                "hexValue": "313238",
                "id": 6489,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "3299:3:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_128_by_1",
                  "typeString": "int_const 128"
                },
                "value": "128"
              },
              "src": "3275:27:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "21d6f3a7",
            "id": 6498,
            "mutability": "constant",
            "name": "MASK_NF_INDEX",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "3613:51:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6492,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "3613:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "arguments": [
                {
                  "id": 6496,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "~",
                  "prefix": true,
                  "src": "3661:2:6",
                  "subExpression": {
                    "hexValue": "30",
                    "id": 6495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3662:1:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_minus_1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_minus_1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 6494,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "3653:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint128_$",
                  "typeString": "type(uint128)"
                },
                "typeName": {
                  "id": 6493,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "3653:7:6",
                  "typeDescriptions": {}
                }
              },
              "id": 6497,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "3653:11:6",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "d905af55",
            "id": 6503,
            "mutability": "constant",
            "name": "TYPE_NF_BIT",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "3984:46:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6499,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "3984:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "commonType": {
                "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                "typeString": "int_const 5789...(69 digits omitted)...9968"
              },
              "id": 6502,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "hexValue": "31",
                "id": 6500,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "4022:1:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1_by_1",
                  "typeString": "int_const 1"
                },
                "value": "1"
              },
              "nodeType": "BinaryOperation",
              "operator": "<<",
              "rightExpression": {
                "hexValue": "323535",
                "id": 6501,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "4027:3:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_255_by_1",
                  "typeString": "int_const 255"
                },
                "value": "255"
              },
              "src": "4022:8:6",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                "typeString": "int_const 5789...(69 digits omitted)...9968"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8f940f63",
            "id": 6505,
            "mutability": "mutable",
            "name": "typeId",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "4342:21:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6504,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4342:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "f3223bed",
            "id": 6507,
            "mutability": "mutable",
            "name": "complainPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "5052:29:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6506,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "5052:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "76942aed",
            "id": 6509,
            "mutability": "mutable",
            "name": "cancelFaultPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "5088:32:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6508,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "5088:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 6523,
            "name": "LogPromiseCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6522,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6511,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_promiseId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6523,
                  "src": "5163:26:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6510,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5163:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6513,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 6523,
                  "src": "5200:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6512,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5200:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6515,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_seller",
                  "nodeType": "VariableDeclaration",
                  "scope": 6523,
                  "src": "5233:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6514,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5233:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6517,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_validFrom",
                  "nodeType": "VariableDeclaration",
                  "scope": 6523,
                  "src": "5267:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6516,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5267:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6519,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_validTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 6523,
                  "src": "5296:16:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6518,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5296:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6521,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_idx",
                  "nodeType": "VariableDeclaration",
                  "scope": 6523,
                  "src": "5323:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6520,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5323:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5152:190:6"
            },
            "src": "5129:214:6"
          },
          {
            "anonymous": false,
            "id": 6537,
            "name": "LogVoucherDelivered",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6536,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6525,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 6537,
                  "src": "5387:30:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6524,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5387:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6527,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6537,
                  "src": "5428:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6526,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5428:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6529,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nodeType": "VariableDeclaration",
                  "scope": 6537,
                  "src": "5462:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6528,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5462:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6531,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 6537,
                  "src": "5488:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6530,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5488:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6533,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_promiseId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6537,
                  "src": "5514:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6532,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5514:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6535,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_correlationId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6537,
                  "src": "5543:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6534,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5543:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5376:196:6"
            },
            "src": "5351:222:6"
          },
          {
            "anonymous": false,
            "id": 6545,
            "name": "LogVoucherRedeemed",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6539,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6545,
                  "src": "5616:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6538,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5616:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6541,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 6545,
                  "src": "5650:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6540,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5650:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6543,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_promiseId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6545,
                  "src": "5676:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6542,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5676:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5605:96:6"
            },
            "src": "5581:121:6"
          },
          {
            "anonymous": false,
            "id": 6549,
            "name": "LogVoucherRefunded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6548,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6547,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6549,
                  "src": "5735:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6546,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5735:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5734:25:6"
            },
            "src": "5710:50:6"
          },
          {
            "anonymous": false,
            "id": 6553,
            "name": "LogVoucherComplain",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6552,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6551,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6553,
                  "src": "5793:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6550,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5793:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5792:25:6"
            },
            "src": "5768:50:6"
          },
          {
            "anonymous": false,
            "id": 6557,
            "name": "LogVoucherFaultCancel",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6556,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6555,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6557,
                  "src": "5854:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6554,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5854:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5853:25:6"
            },
            "src": "5826:53:6"
          },
          {
            "anonymous": false,
            "id": 6563,
            "name": "LogExpirationTriggered",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6559,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6563,
                  "src": "5916:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6558,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5916:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6561,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 6563,
                  "src": "5941:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6560,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5941:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5915:47:6"
            },
            "src": "5887:76:6"
          },
          {
            "anonymous": false,
            "id": 6569,
            "name": "LogFinalizeVoucher",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6568,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6565,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6569,
                  "src": "5996:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6564,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5996:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6567,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 6569,
                  "src": "6021:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6566,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6021:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5995:47:6"
            },
            "src": "5971:72:6"
          },
          {
            "anonymous": false,
            "id": 6575,
            "name": "LogBosonRouterSet",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6574,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6571,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newBosonRouter",
                  "nodeType": "VariableDeclaration",
                  "scope": 6575,
                  "src": "6075:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6570,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6075:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6573,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 6575,
                  "src": "6100:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6572,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6100:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6074:47:6"
            },
            "src": "6051:71:6"
          },
          {
            "anonymous": false,
            "id": 6581,
            "name": "LogCashierSet",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6580,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6577,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newCashier",
                  "nodeType": "VariableDeclaration",
                  "scope": 6581,
                  "src": "6150:19:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6576,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6150:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6579,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 6581,
                  "src": "6171:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6578,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6171:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6149:43:6"
            },
            "src": "6130:63:6"
          },
          {
            "anonymous": false,
            "id": 6587,
            "name": "LogComplainPeriodChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6586,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6583,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newComplainPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 6587,
                  "src": "6242:26:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6582,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6242:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6585,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 6587,
                  "src": "6279:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6584,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6279:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6231:75:6"
            },
            "src": "6201:106:6"
          },
          {
            "anonymous": false,
            "id": 6593,
            "name": "LogCancelFaultPeriodChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6592,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6589,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newCancelFaultPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 6593,
                  "src": "6359:29:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6588,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6359:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6591,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 6593,
                  "src": "6399:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6590,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6399:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6348:78:6"
            },
            "src": "6315:112:6"
          },
          {
            "anonymous": false,
            "id": 6599,
            "name": "LogVoucherSetFaultCancel",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6598,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6595,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 6599,
                  "src": "6466:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6594,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6466:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6597,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nodeType": "VariableDeclaration",
                  "scope": 6599,
                  "src": "6490:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6596,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6490:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6465:41:6"
            },
            "src": "6435:72:6"
          },
          {
            "anonymous": false,
            "id": 6605,
            "name": "LogFundsReleased",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6604,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6601,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6605,
                  "src": "6548:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6600,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6548:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6603,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 6605,
                  "src": "6582:11:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 6602,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "6582:5:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6537:93:6"
            },
            "src": "6515:116:6"
          },
          {
            "body": {
              "id": 6626,
              "nodeType": "Block",
              "src": "6665:335:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6613,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6608,
                          "name": "bosonRouterAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6438,
                          "src": "6684:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 6611,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6714:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6610,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6706:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 6609,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "6706:7:6",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6612,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6706:10:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "6684:32:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4252",
                        "id": 6614,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6718:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_18baaaaee96e1a52a1a9672a774ac9edad16efea4f02bd536aa73e966587bacf",
                          "typeString": "literal_string \"UNSPECIFIED_BR\""
                        },
                        "value": "UNSPECIFIED_BR"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_18baaaaee96e1a52a1a9672a774ac9edad16efea4f02bd536aa73e966587bacf",
                          "typeString": "literal_string \"UNSPECIFIED_BR\""
                        }
                      ],
                      "id": 6607,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6676:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6676:59:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6616,
                  "nodeType": "ExpressionStatement",
                  "src": "6676:59:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6621,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 6618,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "6844:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6619,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "6844:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 6620,
                          "name": "bosonRouterAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6438,
                          "src": "6858:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6844:32:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f4252",
                        "id": 6622,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6878:17:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d74964594bc025886ff5bcef2e33845052a9330085a182179ea7b04b36730cd6",
                          "typeString": "literal_string \"UNAUTHORIZED_BR\""
                        },
                        "value": "UNAUTHORIZED_BR"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d74964594bc025886ff5bcef2e33845052a9330085a182179ea7b04b36730cd6",
                          "typeString": "literal_string \"UNAUTHORIZED_BR\""
                        }
                      ],
                      "id": 6617,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6836:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6836:60:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6624,
                  "nodeType": "ExpressionStatement",
                  "src": "6836:60:6"
                },
                {
                  "id": 6625,
                  "nodeType": "PlaceholderStatement",
                  "src": "6991:1:6"
                }
              ]
            },
            "id": 6627,
            "name": "onlyFromRouter",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 6606,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6662:2:6"
            },
            "src": "6639:361:6",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6648,
              "nodeType": "Block",
              "src": "7035:326:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6635,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6630,
                          "name": "cashierAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6440,
                          "src": "7054:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 6633,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7080:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6632,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7072:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 6631,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7072:7:6",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6634,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7072:10:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "7054:28:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4252",
                        "id": 6636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7084:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_18baaaaee96e1a52a1a9672a774ac9edad16efea4f02bd536aa73e966587bacf",
                          "typeString": "literal_string \"UNSPECIFIED_BR\""
                        },
                        "value": "UNSPECIFIED_BR"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_18baaaaee96e1a52a1a9672a774ac9edad16efea4f02bd536aa73e966587bacf",
                          "typeString": "literal_string \"UNSPECIFIED_BR\""
                        }
                      ],
                      "id": 6629,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7046:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7046:55:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6638,
                  "nodeType": "ExpressionStatement",
                  "src": "7046:55:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6643,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 6640,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "7210:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "7210:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 6642,
                          "name": "cashierAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6440,
                          "src": "7224:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7210:28:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f43",
                        "id": 6644,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7240:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4285f49d3474576aa1214b2208fc063cca9fb8066c1dc66e1b2fc597a667635e",
                          "typeString": "literal_string \"UNAUTHORIZED_C\""
                        },
                        "value": "UNAUTHORIZED_C"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4285f49d3474576aa1214b2208fc063cca9fb8066c1dc66e1b2fc597a667635e",
                          "typeString": "literal_string \"UNAUTHORIZED_C\""
                        }
                      ],
                      "id": 6639,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7202:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6645,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7202:55:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6646,
                  "nodeType": "ExpressionStatement",
                  "src": "7202:55:6"
                },
                {
                  "id": 6647,
                  "nodeType": "PlaceholderStatement",
                  "src": "7352:1:6"
                }
              ]
            },
            "id": 6649,
            "name": "onlyFromCashier",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 6628,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7032:2:6"
            },
            "src": "7008:353:6",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6668,
              "nodeType": "Block",
              "src": "7437:269:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6663,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 6660,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6651,
                              "src": "7533:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6657,
                                  "name": "tokensContract",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6410,
                                  "src": "7509:14:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6656,
                                "name": "IERC721",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9250,
                                "src": "7501:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC721_$9250_$",
                                  "typeString": "type(contract IERC721)"
                                }
                              },
                              "id": 6658,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7501:23:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC721_$9250",
                                "typeString": "contract IERC721"
                              }
                            },
                            "id": 6659,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "ownerOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9183,
                            "src": "7501:31:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view external returns (address)"
                            }
                          },
                          "id": 6661,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7501:48:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 6662,
                          "name": "_sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6653,
                          "src": "7553:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7501:59:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f56",
                        "id": 6664,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7575:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9ccf69668761bd89899c0c9012c57fbf9aa514461640630aa772878c5e0bf2e6",
                          "typeString": "literal_string \"UNAUTHORIZED_V\""
                        },
                        "value": "UNAUTHORIZED_V"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9ccf69668761bd89899c0c9012c57fbf9aa514461640630aa772878c5e0bf2e6",
                          "typeString": "literal_string \"UNAUTHORIZED_V\""
                        }
                      ],
                      "id": 6655,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7479:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7479:123:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6666,
                  "nodeType": "ExpressionStatement",
                  "src": "7479:123:6"
                },
                {
                  "id": 6667,
                  "nodeType": "PlaceholderStatement",
                  "src": "7697:1:6"
                }
              ]
            },
            "id": 6669,
            "name": "onlyVoucherOwner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 6654,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6651,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6669,
                  "src": "7395:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6650,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7395:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6653,
                  "mutability": "mutable",
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 6669,
                  "src": "7420:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6652,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7420:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7394:42:6"
            },
            "src": "7369:337:6",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6690,
              "nodeType": "Block",
              "src": "7751:132:6",
              "statements": [
                {
                  "expression": {
                    "id": 6676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 6674,
                      "name": "tokensContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6410,
                      "src": "7762:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 6675,
                      "name": "_tokensContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6671,
                      "src": "7779:15:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7762:32:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6677,
                  "nodeType": "ExpressionStatement",
                  "src": "7762:32:6"
                },
                {
                  "expression": {
                    "id": 6682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 6678,
                      "name": "complainPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6507,
                      "src": "7807:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_rational_604800_by_1",
                        "typeString": "int_const 604800"
                      },
                      "id": 6681,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "37",
                        "id": 6679,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7824:1:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_7_by_1",
                          "typeString": "int_const 7"
                        },
                        "value": "7"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 6680,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7828:6:6",
                        "subdenomination": "days",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_86400_by_1",
                          "typeString": "int_const 86400"
                        },
                        "value": "1"
                      },
                      "src": "7824:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_604800_by_1",
                        "typeString": "int_const 604800"
                      }
                    },
                    "src": "7807:27:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6683,
                  "nodeType": "ExpressionStatement",
                  "src": "7807:27:6"
                },
                {
                  "expression": {
                    "id": 6688,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 6684,
                      "name": "cancelFaultPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6509,
                      "src": "7845:17:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_rational_604800_by_1",
                        "typeString": "int_const 604800"
                      },
                      "id": 6687,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "37",
                        "id": 6685,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7865:1:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_7_by_1",
                          "typeString": "int_const 7"
                        },
                        "value": "7"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 6686,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7869:6:6",
                        "subdenomination": "days",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_86400_by_1",
                          "typeString": "int_const 86400"
                        },
                        "value": "1"
                      },
                      "src": "7865:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_604800_by_1",
                        "typeString": "int_const 604800"
                      }
                    },
                    "src": "7845:30:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6689,
                  "nodeType": "ExpressionStatement",
                  "src": "7845:30:6"
                }
              ]
            },
            "id": 6691,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6672,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6671,
                  "mutability": "mutable",
                  "name": "_tokensContract",
                  "nodeType": "VariableDeclaration",
                  "scope": 6691,
                  "src": "7726:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6670,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7726:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7725:25:6"
            },
            "returnParameters": {
              "id": 6673,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7751:0:6"
            },
            "scope": 8535,
            "src": "7714:169:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9305
            ],
            "body": {
              "id": 6701,
              "nodeType": "Block",
              "src": "8115:27:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 6698,
                      "name": "_pause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12026,
                      "src": "8126:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 6699,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8126:8:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6700,
                  "nodeType": "ExpressionStatement",
                  "src": "8126:8:6"
                }
              ]
            },
            "documentation": {
              "id": 6692,
              "nodeType": "StructuredDocumentation",
              "src": "7891:168:6",
              "text": " @notice Pause the process of interaction with voucherID's (ERC-721), in case of emergency.\n Only BR contract is in control of this function."
            },
            "functionSelector": "8456cb59",
            "id": 6702,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 6696,
                "modifierName": {
                  "id": 6695,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "8100:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8100:14:6"
              }
            ],
            "name": "pause",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 6694,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8091:8:6"
            },
            "parameters": {
              "id": 6693,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8079:2:6"
            },
            "returnParameters": {
              "id": 6697,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8115:0:6"
            },
            "scope": 8535,
            "src": "8065:77:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9309
            ],
            "body": {
              "id": 6712,
              "nodeType": "Block",
              "src": "8356:29:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 6709,
                      "name": "_unpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12042,
                      "src": "8367:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 6710,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8367:10:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6711,
                  "nodeType": "ExpressionStatement",
                  "src": "8367:10:6"
                }
              ]
            },
            "documentation": {
              "id": 6703,
              "nodeType": "StructuredDocumentation",
              "src": "8150:148:6",
              "text": " @notice Unpause the process of interaction with voucherID's (ERC-721).\n Only BR contract is in control of this function."
            },
            "functionSelector": "3f4ba83a",
            "id": 6713,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 6707,
                "modifierName": {
                  "id": 6706,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "8341:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8341:14:6"
              }
            ],
            "name": "unpause",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 6705,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8332:8:6"
            },
            "parameters": {
              "id": 6704,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8320:2:6"
            },
            "returnParameters": {
              "id": 6708,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8356:0:6"
            },
            "scope": 8535,
            "src": "8304:81:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9329
            ],
            "body": {
              "id": 6833,
              "nodeType": "Block",
              "src": "9124:1451:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6739,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6737,
                          "name": "_validFrom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6718,
                          "src": "9143:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "id": 6738,
                          "name": "_validTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6720,
                          "src": "9157:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9143:22:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f56414c49444954595f46524f4d",
                        "id": 6740,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9167:23:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3dfff879e12777f3cf58c41b18ee8a2fc08a4e09036528922690b3441120a816",
                          "typeString": "literal_string \"INVALID_VALIDITY_FROM\""
                        },
                        "value": "INVALID_VALIDITY_FROM"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3dfff879e12777f3cf58c41b18ee8a2fc08a4e09036528922690b3441120a816",
                          "typeString": "literal_string \"INVALID_VALIDITY_FROM\""
                        }
                      ],
                      "id": 6736,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9135:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9135:56:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6742,
                  "nodeType": "ExpressionStatement",
                  "src": "9135:56:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6749,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6744,
                          "name": "_validTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6720,
                          "src": "9348:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 6745,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "9360:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 6746,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "9360:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "hexValue": "35",
                            "id": 6747,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9378:9:6",
                            "subdenomination": "minutes",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_300_by_1",
                              "typeString": "int_const 300"
                            },
                            "value": "5"
                          },
                          "src": "9360:27:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9348:39:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f56414c49444954595f544f",
                        "id": 6750,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9389:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_220023f3504a4654cffd768699d4a42a97da0536598d777263f15799e2323f90",
                          "typeString": "literal_string \"INVALID_VALIDITY_TO\""
                        },
                        "value": "INVALID_VALIDITY_TO"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_220023f3504a4654cffd768699d4a42a97da0536598d777263f15799e2323f90",
                          "typeString": "literal_string \"INVALID_VALIDITY_TO\""
                        }
                      ],
                      "id": 6743,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9340:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6751,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9340:71:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6752,
                  "nodeType": "ExpressionStatement",
                  "src": "9340:71:6"
                },
                {
                  "assignments": [
                    6754
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6754,
                      "mutability": "mutable",
                      "name": "key",
                      "nodeType": "VariableDeclaration",
                      "scope": 6833,
                      "src": "9602:11:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6753,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9602:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 6755,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9602:11:6"
                },
                {
                  "expression": {
                    "id": 6768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 6756,
                      "name": "key",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6754,
                      "src": "9624:3:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 6763,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": false,
                              "src": "9671:22:6",
                              "subExpression": {
                                "baseExpression": {
                                  "id": 6760,
                                  "name": "tokenNonces",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6448,
                                  "src": "9671:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 6762,
                                "indexExpression": {
                                  "id": 6761,
                                  "name": "_seller",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6716,
                                  "src": "9683:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "9671:20:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 6764,
                              "name": "_validFrom",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6718,
                              "src": "9695:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 6765,
                              "name": "_validTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6720,
                              "src": "9707:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 6758,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "9654:3:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 6759,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "9654:16:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 6766,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9654:62:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 6757,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "9630:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 6767,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9630:97:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "9624:103:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 6769,
                  "nodeType": "ExpressionStatement",
                  "src": "9624:103:6"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6773,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 6770,
                        "name": "promiseKeys",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6455,
                        "src": "9744:11:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 6771,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "9744:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 6772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9765:1:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9744:22:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6787,
                  "nodeType": "IfStatement",
                  "src": "9740:176:6",
                  "trueBody": {
                    "id": 6786,
                    "nodeType": "Block",
                    "src": "9768:148:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 6782,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 6775,
                                  "name": "promiseKeys",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6455,
                                  "src": "9809:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                    "typeString": "bytes32[] storage ref"
                                  }
                                },
                                "id": 6780,
                                "indexExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 6776,
                                      "name": "promises",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6444,
                                      "src": "9821:8:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                                        "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                                      }
                                    },
                                    "id": 6778,
                                    "indexExpression": {
                                      "id": 6777,
                                      "name": "key",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6754,
                                      "src": "9830:3:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "9821:13:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                                      "typeString": "struct VoucherKernel.Promise storage ref"
                                    }
                                  },
                                  "id": 6779,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "idx",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6428,
                                  "src": "9821:17:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9809:30:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "id": 6781,
                                "name": "key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6754,
                                "src": "9843:3:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "src": "9809:37:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "50524f4d4953455f414c52454144595f455849535453",
                              "id": 6783,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9865:24:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_cee9f386670e6cc4a9ff06e8f1c450d656d8d3ea0b981ea52ebdc31ead0bf71c",
                                "typeString": "literal_string \"PROMISE_ALREADY_EXISTS\""
                              },
                              "value": "PROMISE_ALREADY_EXISTS"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_cee9f386670e6cc4a9ff06e8f1c450d656d8d3ea0b981ea52ebdc31ead0bf71c",
                                "typeString": "literal_string \"PROMISE_ALREADY_EXISTS\""
                              }
                            ],
                            "id": 6774,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9783:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9783:121:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6785,
                        "nodeType": "ExpressionStatement",
                        "src": "9783:121:6"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 6805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 6788,
                        "name": "promises",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6444,
                        "src": "9928:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                          "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                        }
                      },
                      "id": 6790,
                      "indexExpression": {
                        "id": 6789,
                        "name": "key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6754,
                        "src": "9937:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9928:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_storage",
                        "typeString": "struct VoucherKernel.Promise storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 6792,
                          "name": "key",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6754,
                          "src": "9978:3:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "baseExpression": {
                            "id": 6793,
                            "name": "tokenNonces",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6448,
                            "src": "10003:11:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 6795,
                          "indexExpression": {
                            "id": 6794,
                            "name": "_seller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6716,
                            "src": "10015:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10003:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 6796,
                          "name": "_seller",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6716,
                          "src": "10046:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 6797,
                          "name": "_validFrom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6718,
                          "src": "10079:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 6798,
                          "name": "_validTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6720,
                          "src": "10113:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 6799,
                          "name": "_price",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6722,
                          "src": "10143:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 6800,
                          "name": "_depositSe",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6724,
                          "src": "10175:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 6801,
                          "name": "_depositBu",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6726,
                          "src": "10211:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 6802,
                            "name": "promiseKeys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6455,
                            "src": "10241:11:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                              "typeString": "bytes32[] storage ref"
                            }
                          },
                          "id": 6803,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "10241:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 6791,
                        "name": "Promise",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6429,
                        "src": "9944:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Promise_$6429_storage_ptr_$",
                          "typeString": "type(struct VoucherKernel.Promise storage pointer)"
                        }
                      },
                      "id": 6804,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "promiseId",
                        "nonce",
                        "seller",
                        "validFrom",
                        "validTo",
                        "price",
                        "depositSe",
                        "depositBu",
                        "idx"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "9944:327:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                        "typeString": "struct VoucherKernel.Promise memory"
                      }
                    },
                    "src": "9928:343:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                      "typeString": "struct VoucherKernel.Promise storage ref"
                    }
                  },
                  "id": 6806,
                  "nodeType": "ExpressionStatement",
                  "src": "9928:343:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6810,
                        "name": "key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6754,
                        "src": "10301:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 6807,
                        "name": "promiseKeys",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6455,
                        "src": "10284:11:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 6809,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "src": "10284:16:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 6811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10284:21:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6812,
                  "nodeType": "ExpressionStatement",
                  "src": "10284:21:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 6814,
                        "name": "key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6754,
                        "src": "10355:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "baseExpression": {
                          "id": 6815,
                          "name": "tokenNonces",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6448,
                          "src": "10373:11:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 6817,
                        "indexExpression": {
                          "id": 6816,
                          "name": "_seller",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6716,
                          "src": "10385:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10373:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 6818,
                        "name": "_seller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6716,
                        "src": "10408:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6819,
                        "name": "_validFrom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6718,
                        "src": "10430:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 6820,
                        "name": "_validTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6720,
                        "src": "10455:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 6821,
                            "name": "promiseKeys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6455,
                            "src": "10478:11:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                              "typeString": "bytes32[] storage ref"
                            }
                          },
                          "id": 6822,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "10478:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 6823,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10499:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "10478:22:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6813,
                      "name": "LogPromiseCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6523,
                      "src": "10323:17:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 6825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10323:188:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6826,
                  "nodeType": "EmitStatement",
                  "src": "10318:193:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6828,
                        "name": "_seller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6716,
                        "src": "10543:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6829,
                        "name": "key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6754,
                        "src": "10552:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 6830,
                        "name": "_quantity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6728,
                        "src": "10557:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6827,
                      "name": "createOrder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6924,
                      "src": "10531:11:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes32_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,bytes32,uint256) returns (uint256)"
                      }
                    },
                    "id": 6831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10531:36:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6735,
                  "id": 6832,
                  "nodeType": "Return",
                  "src": "10524:43:6"
                }
              ]
            },
            "documentation": {
              "id": 6714,
              "nodeType": "StructuredDocumentation",
              "src": "8393:445:6",
              "text": " @notice Creating a new promise for goods or services.\n Can be reused, e.g. for making different batches of these (in the future).\n @param _seller      seller of the promise\n @param _validFrom   Start of valid period\n @param _validTo     End of valid period\n @param _price       Price (payment amount)\n @param _depositSe   Seller's deposit\n @param _depositBu   Buyer's deposit"
            },
            "functionSelector": "797f2a26",
            "id": 6834,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 6732,
                "modifierName": {
                  "id": 6731,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "9091:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9091:14:6"
              }
            ],
            "name": "createTokenSupplyID",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 6730,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9082:8:6"
            },
            "parameters": {
              "id": 6729,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6716,
                  "mutability": "mutable",
                  "name": "_seller",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "8883:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6715,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8883:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6718,
                  "mutability": "mutable",
                  "name": "_validFrom",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "8909:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6717,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8909:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6720,
                  "mutability": "mutable",
                  "name": "_validTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "8938:16:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6719,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8938:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6722,
                  "mutability": "mutable",
                  "name": "_price",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "8965:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6721,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8965:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6724,
                  "mutability": "mutable",
                  "name": "_depositSe",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "8990:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6723,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8990:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6726,
                  "mutability": "mutable",
                  "name": "_depositBu",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "9019:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6725,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9019:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6728,
                  "mutability": "mutable",
                  "name": "_quantity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "9048:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6727,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9048:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8872:200:6"
            },
            "returnParameters": {
              "id": 6735,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6734,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "9115:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6733,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9115:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9114:9:6"
            },
            "scope": 8535,
            "src": "8844:1731:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9341
            ],
            "body": {
              "id": 6859,
              "nodeType": "Block",
              "src": "11313:225:6",
              "statements": [
                {
                  "expression": {
                    "id": 6857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 6849,
                        "name": "paymentDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6452,
                        "src": "11324:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherPaymentMethod_$6436_storage_$",
                          "typeString": "mapping(uint256 => struct VoucherKernel.VoucherPaymentMethod storage ref)"
                        }
                      },
                      "id": 6851,
                      "indexExpression": {
                        "id": 6850,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6837,
                        "src": "11339:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11324:30:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VoucherPaymentMethod_$6436_storage",
                        "typeString": "struct VoucherKernel.VoucherPaymentMethod storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 6853,
                          "name": "_paymentMethod",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6839,
                          "src": "11408:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 6854,
                          "name": "_tokenPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6841,
                          "src": "11456:11:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 6855,
                          "name": "_tokenDeposits",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6843,
                          "src": "11504:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 6852,
                        "name": "VoucherPaymentMethod",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6436,
                        "src": "11357:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_VoucherPaymentMethod_$6436_storage_ptr_$",
                          "typeString": "type(struct VoucherKernel.VoucherPaymentMethod storage pointer)"
                        }
                      },
                      "id": 6856,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "paymentMethod",
                        "addressTokenPrice",
                        "addressTokenDeposits"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "11357:173:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VoucherPaymentMethod_$6436_memory_ptr",
                        "typeString": "struct VoucherKernel.VoucherPaymentMethod memory"
                      }
                    },
                    "src": "11324:206:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_VoucherPaymentMethod_$6436_storage",
                      "typeString": "struct VoucherKernel.VoucherPaymentMethod storage ref"
                    }
                  },
                  "id": 6858,
                  "nodeType": "ExpressionStatement",
                  "src": "11324:206:6"
                }
              ]
            },
            "documentation": {
              "id": 6835,
              "nodeType": "StructuredDocumentation",
              "src": "10583:528:6",
              "text": " @notice Creates a Payment method struct recording the details on how the seller requires to receive Price and Deposits for a certain Voucher Set.\n @param _tokenIdSupply     _tokenIdSupply of the voucher set this is related to\n @param _paymentMethod  might be ETHETH, ETHTKN, TKNETH or TKNTKN\n @param _tokenPrice   token address which will hold the funds for the price of the voucher\n @param _tokenDeposits   token address which will hold the funds for the deposits of the voucher"
            },
            "functionSelector": "cf5c9008",
            "id": 6860,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 6847,
                "modifierName": {
                  "id": 6846,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "11298:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11298:14:6"
              }
            ],
            "name": "createPaymentMethod",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 6845,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11289:8:6"
            },
            "parameters": {
              "id": 6844,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6837,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 6860,
                  "src": "11156:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6836,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11156:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6839,
                  "mutability": "mutable",
                  "name": "_paymentMethod",
                  "nodeType": "VariableDeclaration",
                  "scope": 6860,
                  "src": "11189:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 6838,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "11189:5:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6841,
                  "mutability": "mutable",
                  "name": "_tokenPrice",
                  "nodeType": "VariableDeclaration",
                  "scope": 6860,
                  "src": "11220:19:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6840,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11220:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6843,
                  "mutability": "mutable",
                  "name": "_tokenDeposits",
                  "nodeType": "VariableDeclaration",
                  "scope": 6860,
                  "src": "11250:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6842,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11250:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11145:134:6"
            },
            "returnParameters": {
              "id": 6848,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11313:0:6"
            },
            "scope": 8535,
            "src": "11117:421:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6923,
              "nodeType": "Block",
              "src": "12065:801:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 6878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6873,
                          "name": "_promiseId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6865,
                          "src": "12084:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 6876,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12106:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6875,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12098:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 6874,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "12098:7:6",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6877,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12098:10:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "12084:24:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f50524f4d495345",
                        "id": 6879,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12110:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_792c2e9142854c982cac942d65b00dc6d3f3d4eff10c18677f7c86d71c7d70f7",
                          "typeString": "literal_string \"UNSPECIFIED_PROMISE\""
                        },
                        "value": "UNSPECIFIED_PROMISE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_792c2e9142854c982cac942d65b00dc6d3f3d4eff10c18677f7c86d71c7d70f7",
                          "typeString": "literal_string \"UNSPECIFIED_PROMISE\""
                        }
                      ],
                      "id": 6872,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12076:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12076:56:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6881,
                  "nodeType": "ExpressionStatement",
                  "src": "12076:56:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6888,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "baseExpression": {
                              "id": 6883,
                              "name": "promises",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6444,
                              "src": "12241:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                                "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                              }
                            },
                            "id": 6885,
                            "indexExpression": {
                              "id": 6884,
                              "name": "_promiseId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6865,
                              "src": "12250:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12241:20:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Promise_$6429_storage",
                              "typeString": "struct VoucherKernel.Promise storage ref"
                            }
                          },
                          "id": 6886,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "seller",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6416,
                          "src": "12241:27:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 6887,
                          "name": "_seller",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6863,
                          "src": "12272:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "12241:38:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f434f",
                        "id": 6889,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12281:17:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_83c466e73df30fcb242d5e5dc7f8c37ecc275ffbfc628bb629cb0683570329da",
                          "typeString": "literal_string \"UNAUTHORIZED_CO\""
                        },
                        "value": "UNAUTHORIZED_CO"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_83c466e73df30fcb242d5e5dc7f8c37ecc275ffbfc628bb629cb0683570329da",
                          "typeString": "literal_string \"UNAUTHORIZED_CO\""
                        }
                      ],
                      "id": 6882,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12233:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12233:66:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6891,
                  "nodeType": "ExpressionStatement",
                  "src": "12233:66:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6895,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6893,
                          "name": "_quantity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6867,
                          "src": "12402:9:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 6894,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12414:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "12402:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f5155414e54495459",
                        "id": 6896,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12417:18:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e31c51dc6189444539a626c6dbd620d14aa64460972eca65d71d9401768af7ef",
                          "typeString": "literal_string \"INVALID_QUANTITY\""
                        },
                        "value": "INVALID_QUANTITY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e31c51dc6189444539a626c6dbd620d14aa64460972eca65d71d9401768af7ef",
                          "typeString": "literal_string \"INVALID_QUANTITY\""
                        }
                      ],
                      "id": 6892,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12394:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12394:42:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6898,
                  "nodeType": "ExpressionStatement",
                  "src": "12394:42:6"
                },
                {
                  "assignments": [
                    6900
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6900,
                      "mutability": "mutable",
                      "name": "tokenIdSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 6923,
                      "src": "12532:21:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6899,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12532:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 6904,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "74727565",
                        "id": 6902,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12574:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 6901,
                      "name": "generateTokenType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7189,
                      "src": "12556:17:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$_t_uint256_$",
                        "typeString": "function (bool) returns (uint256)"
                      }
                    },
                    "id": 6903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12556:23:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12532:47:6"
                },
                {
                  "expression": {
                    "id": 6909,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 6905,
                        "name": "ordersPromise",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6459,
                        "src": "12634:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                          "typeString": "mapping(uint256 => bytes32)"
                        }
                      },
                      "id": 6907,
                      "indexExpression": {
                        "id": 6906,
                        "name": "tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6900,
                        "src": "12648:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "12634:28:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 6908,
                      "name": "_promiseId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6865,
                      "src": "12665:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "12634:41:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 6910,
                  "nodeType": "ExpressionStatement",
                  "src": "12634:41:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6915,
                        "name": "_seller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6863,
                        "src": "12738:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6916,
                        "name": "tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6900,
                        "src": "12760:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 6917,
                        "name": "_quantity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6867,
                        "src": "12788:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 6918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12812:2:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 6912,
                            "name": "tokensContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6410,
                            "src": "12703:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 6911,
                          "name": "IERC1155ERC721",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8975,
                          "src": "12688:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC1155ERC721_$8975_$",
                            "typeString": "type(contract IERC1155ERC721)"
                          }
                        },
                        "id": 6913,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12688:30:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1155ERC721_$8975",
                          "typeString": "contract IERC1155ERC721"
                        }
                      },
                      "id": 6914,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8945,
                      "src": "12688:35:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint256,bytes memory) external"
                      }
                    },
                    "id": 6919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12688:137:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6920,
                  "nodeType": "ExpressionStatement",
                  "src": "12688:137:6"
                },
                {
                  "expression": {
                    "id": 6921,
                    "name": "tokenIdSupply",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6900,
                    "src": "12845:13:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6871,
                  "id": 6922,
                  "nodeType": "Return",
                  "src": "12838:20:6"
                }
              ]
            },
            "documentation": {
              "id": 6861,
              "nodeType": "StructuredDocumentation",
              "src": "11546:376:6",
              "text": " @notice Create an order for offering a certain quantity of an asset\n This creates a listing in a marketplace, technically as an ERC-1155 non-fungible token with supply.\n @param _seller     seller of the promise\n @param _promiseId  ID of a promise (simplified into asset for demo)\n @param _quantity   Quantity of assets on offer"
            },
            "id": 6924,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createOrder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6868,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6863,
                  "mutability": "mutable",
                  "name": "_seller",
                  "nodeType": "VariableDeclaration",
                  "scope": 6924,
                  "src": "11959:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6862,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11959:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6865,
                  "mutability": "mutable",
                  "name": "_promiseId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6924,
                  "src": "11985:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6864,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11985:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6867,
                  "mutability": "mutable",
                  "name": "_quantity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6924,
                  "src": "12014:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6866,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12014:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11948:90:6"
            },
            "returnParameters": {
              "id": 6871,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6870,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6924,
                  "src": "12056:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6869,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12056:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12055:9:6"
            },
            "scope": 8535,
            "src": "11928:938:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              9417
            ],
            "body": {
              "id": 6964,
              "nodeType": "Block",
              "src": "13491:429:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6940,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6927,
                        "src": "13539:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 6941,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6929,
                        "src": "13555:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6942,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6931,
                        "src": "13564:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6939,
                      "name": "checkOrderFillable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7038,
                      "src": "13520:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address,address) view"
                      }
                    },
                    "id": 6943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13520:52:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6944,
                  "nodeType": "ExpressionStatement",
                  "src": "13520:52:6"
                },
                {
                  "assignments": [
                    6946
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6946,
                      "mutability": "mutable",
                      "name": "voucherTokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 6964,
                      "src": "13608:22:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6945,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13608:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 6952,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 6948,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6929,
                        "src": "13644:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6949,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6931,
                        "src": "13653:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6950,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6927,
                        "src": "13662:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6947,
                      "name": "extract721",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7131,
                      "src": "13633:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) returns (uint256)"
                      }
                    },
                    "id": 6951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13633:44:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13608:69:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 6954,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6927,
                        "src": "13729:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 6955,
                        "name": "voucherTokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6946,
                        "src": "13758:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 6956,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6929,
                        "src": "13787:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6957,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6931,
                        "src": "13809:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 6959,
                            "name": "voucherTokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6946,
                            "src": "13857:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 6958,
                          "name": "getPromiseIdFromVoucherId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8260,
                          "src": "13831:25:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                            "typeString": "function (uint256) view returns (bytes32)"
                          }
                        },
                        "id": 6960,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13831:41:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 6961,
                        "name": "_correlationId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6933,
                        "src": "13887:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6953,
                      "name": "LogVoucherDelivered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6537,
                      "src": "13695:19:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,address,address,bytes32,uint256)"
                      }
                    },
                    "id": 6962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13695:217:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6963,
                  "nodeType": "EmitStatement",
                  "src": "13690:222:6"
                }
              ]
            },
            "documentation": {
              "id": 6925,
              "nodeType": "StructuredDocumentation",
              "src": "12874:434:6",
              "text": " @notice Fill Voucher Order, iff funds paid, then extract & mint NFT to the voucher holder\n @param _tokenIdSupply   ID of the supply token (ERC-1155)\n @param _issuer          Address of the token's issuer\n @param _holder          Address of the recipient of the voucher (ERC-721)\n @param _correlationId           ID of the current interaction with the smart contract for a specific user"
            },
            "functionSelector": "590f6f68",
            "id": 6965,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 6937,
                "modifierName": {
                  "id": 6936,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "13476:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13476:14:6"
              }
            ],
            "name": "fillOrder",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 6935,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13467:8:6"
            },
            "parameters": {
              "id": 6934,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6927,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 6965,
                  "src": "13343:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6926,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13343:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6929,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nodeType": "VariableDeclaration",
                  "scope": 6965,
                  "src": "13376:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6928,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13376:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6931,
                  "mutability": "mutable",
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 6965,
                  "src": "13402:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6930,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13402:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6933,
                  "mutability": "mutable",
                  "name": "_correlationId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6965,
                  "src": "13428:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6932,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13428:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13332:125:6"
            },
            "returnParameters": {
              "id": 6938,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13491:0:6"
            },
            "scope": 8535,
            "src": "13314:606:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7037,
              "nodeType": "Block",
              "src": "14347:1008:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6978,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6976,
                          "name": "_tokenIdSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6968,
                          "src": "14366:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 6977,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14384:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14366:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4944",
                        "id": 6979,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14387:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        },
                        "value": "UNSPECIFIED_ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        }
                      ],
                      "id": 6975,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14358:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14358:46:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6981,
                  "nodeType": "ExpressionStatement",
                  "src": "14358:46:6"
                },
                {
                  "condition": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 6982,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6972,
                        "src": "14511:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 6983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isContract",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11160,
                      "src": "14511:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 6984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14511:20:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6996,
                  "nodeType": "IfStatement",
                  "src": "14507:282:6",
                  "trueBody": {
                    "id": 6995,
                    "nodeType": "Block",
                    "src": "14533:256:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30783135306237613032",
                                  "id": 6990,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "14609:10:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_353073666_by_1",
                                    "typeString": "int_const 353073666"
                                  },
                                  "value": "0x150b7a02"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_353073666_by_1",
                                    "typeString": "int_const 353073666"
                                  }
                                ],
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 6987,
                                      "name": "_holder",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6972,
                                      "src": "14582:7:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 6986,
                                    "name": "IERC165",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9025,
                                    "src": "14574:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC165_$9025_$",
                                      "typeString": "type(contract IERC165)"
                                    }
                                  },
                                  "id": 6988,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14574:16:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC165_$9025",
                                    "typeString": "contract IERC165"
                                  }
                                },
                                "id": 6989,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "supportsInterface",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9024,
                                "src": "14574:34:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_bytes4_$returns$_t_bool_$",
                                  "typeString": "function (bytes4) view external returns (bool)"
                                }
                              },
                              "id": 6991,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14574:46:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "554e535550504f525445445f4552433732315f5245434549564544",
                              "id": 6992,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14639:29:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_93f4b73c3d86bd67195020f99055e3655658f7a9ebf8672f2b1df47f80c21821",
                                "typeString": "literal_string \"UNSUPPORTED_ERC721_RECEIVED\""
                              },
                              "value": "UNSUPPORTED_ERC721_RECEIVED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_93f4b73c3d86bd67195020f99055e3655658f7a9ebf8672f2b1df47f80c21821",
                                "typeString": "literal_string \"UNSUPPORTED_ERC721_RECEIVED\""
                              }
                            ],
                            "id": 6985,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "14548:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6993,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14548:135:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6994,
                        "nodeType": "ExpressionStatement",
                        "src": "14548:135:6"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7003,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6998,
                          "name": "_holder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6972,
                          "src": "14809:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 7001,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14828:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 7000,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14820:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 6999,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "14820:7:6",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7002,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14820:10:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "14809:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 7004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14832:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 6997,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14801:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7005,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14801:53:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7006,
                  "nodeType": "ExpressionStatement",
                  "src": "14801:53:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7016,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 7012,
                              "name": "_issuer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6970,
                              "src": "15012:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7013,
                              "name": "_tokenIdSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6968,
                              "src": "15021:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7009,
                                  "name": "tokensContract",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6410,
                                  "src": "14986:14:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7008,
                                "name": "IERC1155",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8931,
                                "src": "14977:8:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC1155_$8931_$",
                                  "typeString": "type(contract IERC1155)"
                                }
                              },
                              "id": 7010,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14977:24:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC1155_$8931",
                                "typeString": "contract IERC1155"
                              }
                            },
                            "id": 7011,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8899,
                            "src": "14977:34:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,uint256) view external returns (uint256)"
                            }
                          },
                          "id": 7014,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14977:59:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 7015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15039:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14977:63:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f464645525f454d505459",
                        "id": 7017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15055:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6876f935fab011de6b034451c60bbcc0620e40b8eebb55c78ca705d7896ccee0",
                          "typeString": "literal_string \"OFFER_EMPTY\""
                        },
                        "value": "OFFER_EMPTY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6876f935fab011de6b034451c60bbcc0620e40b8eebb55c78ca705d7896ccee0",
                          "typeString": "literal_string \"OFFER_EMPTY\""
                        }
                      ],
                      "id": 7007,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14955:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7018,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14955:124:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7019,
                  "nodeType": "ExpressionStatement",
                  "src": "14955:124:6"
                },
                {
                  "assignments": [
                    7021
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7021,
                      "mutability": "mutable",
                      "name": "promiseKey",
                      "nodeType": "VariableDeclaration",
                      "scope": 7037,
                      "src": "15174:18:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 7020,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "15174:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7025,
                  "initialValue": {
                    "baseExpression": {
                      "id": 7022,
                      "name": "ordersPromise",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6459,
                      "src": "15195:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                        "typeString": "mapping(uint256 => bytes32)"
                      }
                    },
                    "id": 7024,
                    "indexExpression": {
                      "id": 7023,
                      "name": "_tokenIdSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6968,
                      "src": "15209:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "15195:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15174:50:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7033,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "baseExpression": {
                              "id": 7027,
                              "name": "promises",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6444,
                              "src": "15259:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                                "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                              }
                            },
                            "id": 7029,
                            "indexExpression": {
                              "id": 7028,
                              "name": "promiseKey",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7021,
                              "src": "15268:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "15259:20:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Promise_$6429_storage",
                              "typeString": "struct VoucherKernel.Promise storage ref"
                            }
                          },
                          "id": 7030,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "validTo",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6420,
                          "src": "15259:28:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "expression": {
                            "id": 7031,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "15291:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 7032,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "15291:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15259:47:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f464645525f45585049524544",
                        "id": 7034,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15321:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a74befa6e5e88163dcfc9f9aa11dec8458181ebc8f44064ec59ad9b923770678",
                          "typeString": "literal_string \"OFFER_EXPIRED\""
                        },
                        "value": "OFFER_EXPIRED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a74befa6e5e88163dcfc9f9aa11dec8458181ebc8f44064ec59ad9b923770678",
                          "typeString": "literal_string \"OFFER_EXPIRED\""
                        }
                      ],
                      "id": 7026,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15237:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15237:110:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7036,
                  "nodeType": "ExpressionStatement",
                  "src": "15237:110:6"
                }
              ]
            },
            "documentation": {
              "id": 6966,
              "nodeType": "StructuredDocumentation",
              "src": "13928:279:6",
              "text": " @notice Check order is fillable\n @dev Will throw if checks don't pass\n @param _tokenIdSupply  ID of the supply token\n @param _issuer  Address of the token's issuer\n @param _holder  Address of the recipient of the voucher (ERC-721)"
            },
            "id": 7038,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkOrderFillable",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6968,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7038,
                  "src": "14251:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6967,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14251:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6970,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nodeType": "VariableDeclaration",
                  "scope": 7038,
                  "src": "14284:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6969,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14284:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6972,
                  "mutability": "mutable",
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 7038,
                  "src": "14310:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6971,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14310:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14240:92:6"
            },
            "returnParameters": {
              "id": 6974,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14347:0:6"
            },
            "scope": 8535,
            "src": "14213:1142:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7130,
              "nodeType": "Block",
              "src": "15941:1252:6",
              "statements": [
                {
                  "condition": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 7050,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7043,
                        "src": "15956:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 7051,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isContract",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11160,
                      "src": "15956:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 7052,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15956:16:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7074,
                  "nodeType": "IfStatement",
                  "src": "15952:545:6",
                  "trueBody": {
                    "id": 7073,
                    "nodeType": "Block",
                    "src": "15974:523:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 7069,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 7058,
                                    "name": "_issuer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7041,
                                    "src": "16079:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 7059,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "16109:3:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 7060,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "16109:10:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "id": 7061,
                                    "name": "_tokenIdSupply",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7045,
                                    "src": "16142:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "hexValue": "",
                                    "id": 7062,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16179:2:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    },
                                    "value": ""
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 7055,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7043,
                                        "src": "16035:3:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 7054,
                                      "name": "ERC721TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9268,
                                      "src": "16015:19:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$9268_$",
                                        "typeString": "type(contract ERC721TokenReceiver)"
                                      }
                                    },
                                    "id": 7056,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "16015:24:6",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC721TokenReceiver_$9268",
                                      "typeString": "contract ERC721TokenReceiver"
                                    }
                                  },
                                  "id": 7057,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC721Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9267,
                                  "src": "16015:41:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 7063,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16015:185:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 7065,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7043,
                                        "src": "16224:3:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 7064,
                                      "name": "ERC721TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9268,
                                      "src": "16204:19:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$9268_$",
                                        "typeString": "type(contract ERC721TokenReceiver)"
                                      }
                                    },
                                    "id": 7066,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "16204:24:6",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC721TokenReceiver_$9268",
                                      "typeString": "contract ERC721TokenReceiver"
                                    }
                                  },
                                  "id": 7067,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC721Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9267,
                                  "src": "16204:41:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 7068,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "selector",
                                "nodeType": "MemberAccess",
                                "src": "16204:50:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "16015:239:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "554e535550504f525445445f4552433732315f5245434549564544",
                              "id": 7070,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16273:29:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_93f4b73c3d86bd67195020f99055e3655658f7a9ebf8672f2b1df47f80c21821",
                                "typeString": "literal_string \"UNSUPPORTED_ERC721_RECEIVED\""
                              },
                              "value": "UNSUPPORTED_ERC721_RECEIVED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_93f4b73c3d86bd67195020f99055e3655658f7a9ebf8672f2b1df47f80c21821",
                                "typeString": "literal_string \"UNSUPPORTED_ERC721_RECEIVED\""
                              }
                            ],
                            "id": 7053,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "15989:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7071,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15989:328:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7072,
                        "nodeType": "ExpressionStatement",
                        "src": "15989:328:6"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7079,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7041,
                        "src": "16545:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 7080,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7045,
                        "src": "16554:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "31",
                        "id": 7081,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16570:1:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 7076,
                            "name": "tokensContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6410,
                            "src": "16524:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7075,
                          "name": "IERC1155ERC721",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8975,
                          "src": "16509:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC1155ERC721_$8975_$",
                            "typeString": "type(contract IERC1155ERC721)"
                          }
                        },
                        "id": 7077,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16509:30:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1155ERC721_$8975",
                          "typeString": "contract IERC1155ERC721"
                        }
                      },
                      "id": 7078,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8955,
                      "src": "16509:35:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256) external"
                      }
                    },
                    "id": 7082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16509:63:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7083,
                  "nodeType": "ExpressionStatement",
                  "src": "16509:63:6"
                },
                {
                  "assignments": [
                    7085
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7085,
                      "mutability": "mutable",
                      "name": "voucherTokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 7130,
                      "src": "16651:22:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7084,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16651:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7092,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 7086,
                      "name": "_tokenIdSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7045,
                      "src": "16689:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "|",
                    "rightExpression": {
                      "id": 7090,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "16706:30:6",
                      "subExpression": {
                        "baseExpression": {
                          "id": 7087,
                          "name": "typeCounters",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6479,
                          "src": "16708:12:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 7089,
                        "indexExpression": {
                          "id": 7088,
                          "name": "_tokenIdSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7045,
                          "src": "16721:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "IndexAccess",
                        "src": "16708:28:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16689:47:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16651:85:6"
                },
                {
                  "expression": {
                    "id": 7104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7093,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "16771:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7095,
                        "indexExpression": {
                          "id": 7094,
                          "name": "voucherTokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7085,
                          "src": "16786:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16771:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7096,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6259,
                      "src": "16771:37:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 7098,
                              "name": "vouchersStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6463,
                              "src": "16835:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                              }
                            },
                            "id": 7100,
                            "indexExpression": {
                              "id": 7099,
                              "name": "voucherTokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7085,
                              "src": "16850:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "16835:30:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                            }
                          },
                          "id": 7101,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6259,
                          "src": "16835:37:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 7102,
                          "name": "IDX_COMMIT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6196,
                          "src": "16887:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7097,
                        "name": "setChange",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6379,
                        "src": "16811:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                          "typeString": "function (uint8,uint8) pure returns (uint8)"
                        }
                      },
                      "id": 7103,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16811:97:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "16771:137:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 7105,
                  "nodeType": "ExpressionStatement",
                  "src": "16771:137:6"
                },
                {
                  "expression": {
                    "id": 7111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7106,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "16919:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7108,
                        "indexExpression": {
                          "id": 7107,
                          "name": "voucherTokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7085,
                          "src": "16934:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16919:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7109,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isPaymentReleased",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6261,
                      "src": "16919:48:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "66616c7365",
                      "id": 7110,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16970:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "16919:56:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7112,
                  "nodeType": "ExpressionStatement",
                  "src": "16919:56:6"
                },
                {
                  "expression": {
                    "id": 7118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7113,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "16986:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7115,
                        "indexExpression": {
                          "id": 7114,
                          "name": "voucherTokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7085,
                          "src": "17001:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16986:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7116,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isDepositsReleased",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6263,
                      "src": "16986:49:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "66616c7365",
                      "id": 7117,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17038:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "16986:57:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7119,
                  "nodeType": "ExpressionStatement",
                  "src": "16986:57:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7124,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7043,
                        "src": "17131:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 7125,
                        "name": "voucherTokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7085,
                        "src": "17136:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 7121,
                            "name": "tokensContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6410,
                            "src": "17110:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7120,
                          "name": "IERC1155ERC721",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8975,
                          "src": "17095:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC1155ERC721_$8975_$",
                            "typeString": "type(contract IERC1155ERC721)"
                          }
                        },
                        "id": 7122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17095:30:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1155ERC721_$8975",
                          "typeString": "contract IERC1155ERC721"
                        }
                      },
                      "id": 7123,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8965,
                      "src": "17095:35:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 7126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17095:56:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7127,
                  "nodeType": "ExpressionStatement",
                  "src": "17095:56:6"
                },
                {
                  "expression": {
                    "id": 7128,
                    "name": "voucherTokenId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7085,
                    "src": "17171:14:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7049,
                  "id": 7129,
                  "nodeType": "Return",
                  "src": "17164:21:6"
                }
              ]
            },
            "documentation": {
              "id": 7039,
              "nodeType": "StructuredDocumentation",
              "src": "15363:437:6",
              "text": " @notice Extract a standard non-fungible token ERC-721 from a supply stored in ERC-1155\n @dev Token ID is derived following the same principles for both ERC-1155 and ERC-721\n @param _issuer          The address of the token issuer\n @param _to              The address of the token holder\n @param _tokenIdSupply   ID of the token type\n @return                 ID of the voucher token"
            },
            "id": 7131,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "extract721",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7046,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7041,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nodeType": "VariableDeclaration",
                  "scope": 7131,
                  "src": "15836:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7040,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15836:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7043,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 7131,
                  "src": "15862:11:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7042,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15862:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7045,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7131,
                  "src": "15884:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7044,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15884:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15825:88:6"
            },
            "returnParameters": {
              "id": 7049,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7048,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7131,
                  "src": "15932:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7047,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15932:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15931:9:6"
            },
            "scope": 8535,
            "src": "15806:1387:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              9363
            ],
            "body": {
              "id": 7155,
              "nodeType": "Block",
              "src": "17734:85:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7150,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7134,
                        "src": "17781:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 7151,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7136,
                        "src": "17790:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 7152,
                        "name": "_qty",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7138,
                        "src": "17806:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 7147,
                            "name": "tokensContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6410,
                            "src": "17760:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7146,
                          "name": "IERC1155ERC721",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8975,
                          "src": "17745:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC1155ERC721_$8975_$",
                            "typeString": "type(contract IERC1155ERC721)"
                          }
                        },
                        "id": 7148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17745:30:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1155ERC721_$8975",
                          "typeString": "contract IERC1155ERC721"
                        }
                      },
                      "id": 7149,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8955,
                      "src": "17745:35:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256) external"
                      }
                    },
                    "id": 7153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17745:66:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7154,
                  "nodeType": "ExpressionStatement",
                  "src": "17745:66:6"
                }
              ]
            },
            "documentation": {
              "id": 7132,
              "nodeType": "StructuredDocumentation",
              "src": "17201:366:6",
              "text": " @notice Extract a standard non-fungible tokens ERC-721 from a supply stored in ERC-1155\n @dev Token ID is derived following the same principles for both ERC-1155 and ERC-721\n @param _issuer          The address of the token issuer\n @param _tokenIdSupply   ID of the token type\n @param _qty   qty that should be burned"
            },
            "functionSelector": "74898e82",
            "id": 7156,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7142,
                "modifierName": {
                  "id": 7141,
                  "name": "whenPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12010,
                  "src": "17707:10:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17707:10:6"
              },
              {
                "id": 7144,
                "modifierName": {
                  "id": 7143,
                  "name": "onlyFromCashier",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6649,
                  "src": "17718:15:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17718:15:6"
              }
            ],
            "name": "burnSupplyOnPause",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7140,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17698:8:6"
            },
            "parameters": {
              "id": 7139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7134,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nodeType": "VariableDeclaration",
                  "scope": 7156,
                  "src": "17610:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7133,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17610:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7136,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7156,
                  "src": "17636:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7135,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17636:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7138,
                  "mutability": "mutable",
                  "name": "_qty",
                  "nodeType": "VariableDeclaration",
                  "scope": 7156,
                  "src": "17669:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7137,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17669:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17599:89:6"
            },
            "returnParameters": {
              "id": 7145,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17734:0:6"
            },
            "scope": 8535,
            "src": "17573:246:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7188,
              "nodeType": "Block",
              "src": "18205:359:6",
              "statements": [
                {
                  "expression": {
                    "id": 7165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "18216:8:6",
                    "subExpression": {
                      "id": 7164,
                      "name": "typeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6505,
                      "src": "18216:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7166,
                  "nodeType": "ExpressionStatement",
                  "src": "18216:8:6"
                },
                {
                  "condition": {
                    "id": 7167,
                    "name": "_isNonFungible",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7159,
                    "src": "18241:14:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 7184,
                    "nodeType": "Block",
                    "src": "18400:127:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 7182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7178,
                            "name": "_tokenType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7162,
                            "src": "18415:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7181,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 7179,
                              "name": "typeId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6505,
                              "src": "18428:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "313238",
                              "id": 7180,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18438:3:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_128_by_1",
                                "typeString": "int_const 128"
                              },
                              "value": "128"
                            },
                            "src": "18428:13:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18415:26:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7183,
                        "nodeType": "ExpressionStatement",
                        "src": "18415:26:6"
                      }
                    ]
                  },
                  "id": 7185,
                  "nodeType": "IfStatement",
                  "src": "18237:290:6",
                  "trueBody": {
                    "id": 7177,
                    "nodeType": "Block",
                    "src": "18257:137:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 7175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7168,
                            "name": "_tokenType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7162,
                            "src": "18272:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7174,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 7169,
                              "name": "TYPE_NF_BIT",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6503,
                              "src": "18285:11:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "|",
                            "rightExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7172,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 7170,
                                    "name": "typeId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6505,
                                    "src": "18300:6:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "hexValue": "313238",
                                    "id": 7171,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "18310:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_128_by_1",
                                      "typeString": "int_const 128"
                                    },
                                    "value": "128"
                                  },
                                  "src": "18300:13:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 7173,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "18299:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "18285:29:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18272:42:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7176,
                        "nodeType": "ExpressionStatement",
                        "src": "18272:42:6"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 7186,
                    "name": "_tokenType",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7162,
                    "src": "18546:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7163,
                  "id": 7187,
                  "nodeType": "Return",
                  "src": "18539:17:6"
                }
              ]
            },
            "documentation": {
              "id": 7157,
              "nodeType": "StructuredDocumentation",
              "src": "17827:263:6",
              "text": " @notice Creating a new token type, serving as the base for tokenID generation for NFTs, and a de facto ID for FTs.\n @param _isNonFungible   Flag for generating NFT or FT\n @return _tokenType   Returns a newly generated token type"
            },
            "id": 7189,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "generateTokenType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7160,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7159,
                  "mutability": "mutable",
                  "name": "_isNonFungible",
                  "nodeType": "VariableDeclaration",
                  "scope": 7189,
                  "src": "18123:19:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7158,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18123:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18122:21:6"
            },
            "returnParameters": {
              "id": 7163,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7162,
                  "mutability": "mutable",
                  "name": "_tokenType",
                  "nodeType": "VariableDeclaration",
                  "scope": 7189,
                  "src": "18180:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7161,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18180:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18179:20:6"
            },
            "scope": 8535,
            "src": "18096:468:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              9371
            ],
            "body": {
              "id": 7256,
              "nodeType": "Block",
              "src": "18996:798:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "baseExpression": {
                                "id": 7208,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "19070:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 7210,
                              "indexExpression": {
                                "id": 7209,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7192,
                                "src": "19085:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "19070:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 7211,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "status",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6259,
                            "src": "19070:38:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 7207,
                          "name": "isStateCommitted",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6284,
                          "src": "19053:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                            "typeString": "function (uint8) pure returns (bool)"
                          }
                        },
                        "id": 7212,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19053:56:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f50524f434553534544",
                        "id": 7213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19124:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_85aa68df5043b4881d3b6873b2ac0da9afd51462b965ad79d44d506b45049ebd",
                          "typeString": "literal_string \"ALREADY_PROCESSED\""
                        },
                        "value": "ALREADY_PROCESSED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_85aa68df5043b4881d3b6873b2ac0da9afd51462b965ad79d44d506b45049ebd",
                          "typeString": "literal_string \"ALREADY_PROCESSED\""
                        }
                      ],
                      "id": 7206,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "19031:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19031:123:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7215,
                  "nodeType": "ExpressionStatement",
                  "src": "19031:123:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7217,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7192,
                        "src": "19301:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7216,
                      "name": "isInValidityPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8512,
                      "src": "19282:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) view returns (bool)"
                      }
                    },
                    "id": 7218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19282:35:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7219,
                  "nodeType": "ExpressionStatement",
                  "src": "19282:35:6"
                },
                {
                  "assignments": [
                    7221
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7221,
                      "mutability": "mutable",
                      "name": "tPromise",
                      "nodeType": "VariableDeclaration",
                      "scope": 7256,
                      "src": "19328:23:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                        "typeString": "struct VoucherKernel.Promise"
                      },
                      "typeName": {
                        "id": 7220,
                        "name": "Promise",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6429,
                        "src": "19328:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Promise_$6429_storage_ptr",
                          "typeString": "struct VoucherKernel.Promise"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7227,
                  "initialValue": {
                    "baseExpression": {
                      "id": 7222,
                      "name": "promises",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6444,
                      "src": "19367:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                        "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                      }
                    },
                    "id": 7226,
                    "indexExpression": {
                      "arguments": [
                        {
                          "id": 7224,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7192,
                          "src": "19402:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7223,
                        "name": "getPromiseIdFromVoucherId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8260,
                        "src": "19376:25:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (uint256) view returns (bytes32)"
                        }
                      },
                      "id": 7225,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19376:42:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19367:52:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                      "typeString": "struct VoucherKernel.Promise storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19328:91:6"
                },
                {
                  "expression": {
                    "id": 7234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7228,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "19432:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7230,
                        "indexExpression": {
                          "id": 7229,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7192,
                          "src": "19447:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "19432:31:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7231,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "complainPeriodStart",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6265,
                      "src": "19432:51:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 7232,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "19486:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 7233,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "19486:15:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19432:69:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7235,
                  "nodeType": "ExpressionStatement",
                  "src": "19432:69:6"
                },
                {
                  "expression": {
                    "id": 7247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7236,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "19512:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7238,
                        "indexExpression": {
                          "id": 7237,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7192,
                          "src": "19527:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "19512:31:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7239,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6259,
                      "src": "19512:38:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 7241,
                              "name": "vouchersStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6463,
                              "src": "19577:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                              }
                            },
                            "id": 7243,
                            "indexExpression": {
                              "id": 7242,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7192,
                              "src": "19592:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "19577:31:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                            }
                          },
                          "id": 7244,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6259,
                          "src": "19577:38:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 7245,
                          "name": "IDX_REDEEM",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6199,
                          "src": "19630:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7240,
                        "name": "setChange",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6379,
                        "src": "19553:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                          "typeString": "function (uint8,uint8) pure returns (uint8)"
                        }
                      },
                      "id": 7246,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19553:98:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "19512:139:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 7248,
                  "nodeType": "ExpressionStatement",
                  "src": "19512:139:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7250,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7192,
                        "src": "19702:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 7251,
                        "name": "_msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7194,
                        "src": "19732:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 7252,
                          "name": "tPromise",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7221,
                          "src": "19757:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                            "typeString": "struct VoucherKernel.Promise memory"
                          }
                        },
                        "id": 7253,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "promiseId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6412,
                        "src": "19757:18:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 7249,
                      "name": "LogVoucherRedeemed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6545,
                      "src": "19669:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (uint256,address,bytes32)"
                      }
                    },
                    "id": 7254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19669:117:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7255,
                  "nodeType": "EmitStatement",
                  "src": "19664:122:6"
                }
              ]
            },
            "documentation": {
              "id": 7190,
              "nodeType": "StructuredDocumentation",
              "src": "18601:185:6",
              "text": " @notice Redemption of the vouchers promise\n @param _tokenIdVoucher   ID of the voucher\n @param _msgSender   account called the fn from the BR contract"
            },
            "functionSelector": "7bde82f2",
            "id": 7257,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7198,
                "modifierName": {
                  "id": 7197,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11999,
                  "src": "18898:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18898:13:6"
              },
              {
                "id": 7200,
                "modifierName": {
                  "id": 7199,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "18921:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18921:14:6"
              },
              {
                "arguments": [
                  {
                    "id": 7202,
                    "name": "_tokenIdVoucher",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7192,
                    "src": "18962:15:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "id": 7203,
                    "name": "_msgSender",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7194,
                    "src": "18979:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7204,
                "modifierName": {
                  "id": 7201,
                  "name": "onlyVoucherOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6669,
                  "src": "18945:16:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$_t_address_$",
                    "typeString": "modifier (uint256,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18945:45:6"
              }
            ],
            "name": "redeem",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7196,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "18880:8:6"
            },
            "parameters": {
              "id": 7195,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7192,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 7257,
                  "src": "18808:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7191,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18808:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7194,
                  "mutability": "mutable",
                  "name": "_msgSender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7257,
                  "src": "18833:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7193,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18833:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18807:45:6"
            },
            "returnParameters": {
              "id": 7205,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18996:0:6"
            },
            "scope": 8535,
            "src": "18792:1002:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9379
            ],
            "body": {
              "id": 7313,
              "nodeType": "Block",
              "src": "20263:606:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "baseExpression": {
                                "id": 7276,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "20313:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 7278,
                              "indexExpression": {
                                "id": 7277,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7260,
                                "src": "20328:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "20313:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 7279,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "status",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6259,
                            "src": "20313:38:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 7275,
                          "name": "isStateCommitted",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6284,
                          "src": "20296:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                            "typeString": "function (uint8) pure returns (bool)"
                          }
                        },
                        "id": 7280,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20296:56:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e4150504c494341424c455f535441545553",
                        "id": 7281,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20367:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d0faf1dea07f76cde9f53f3359618f66541a0b51c05040e220f0377fad18fdb4",
                          "typeString": "literal_string \"INAPPLICABLE_STATUS\""
                        },
                        "value": "INAPPLICABLE_STATUS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d0faf1dea07f76cde9f53f3359618f66541a0b51c05040e220f0377fad18fdb4",
                          "typeString": "literal_string \"INAPPLICABLE_STATUS\""
                        }
                      ],
                      "id": 7274,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "20274:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20274:125:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7283,
                  "nodeType": "ExpressionStatement",
                  "src": "20274:125:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7285,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7260,
                        "src": "20560:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7284,
                      "name": "isInValidityPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8512,
                      "src": "20541:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) view returns (bool)"
                      }
                    },
                    "id": 7286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20541:35:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7287,
                  "nodeType": "ExpressionStatement",
                  "src": "20541:35:6"
                },
                {
                  "expression": {
                    "id": 7294,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7288,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "20589:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7290,
                        "indexExpression": {
                          "id": 7289,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7260,
                          "src": "20604:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20589:31:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7291,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "complainPeriodStart",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6265,
                      "src": "20589:51:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 7292,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "20643:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 7293,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "20643:15:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20589:69:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7295,
                  "nodeType": "ExpressionStatement",
                  "src": "20589:69:6"
                },
                {
                  "expression": {
                    "id": 7307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7296,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "20669:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7298,
                        "indexExpression": {
                          "id": 7297,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7260,
                          "src": "20684:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20669:31:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7299,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6259,
                      "src": "20669:38:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 7301,
                              "name": "vouchersStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6463,
                              "src": "20734:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                              }
                            },
                            "id": 7303,
                            "indexExpression": {
                              "id": 7302,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7260,
                              "src": "20749:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20734:31:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                            }
                          },
                          "id": 7304,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6259,
                          "src": "20734:38:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 7305,
                          "name": "IDX_REFUND",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6202,
                          "src": "20787:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7300,
                        "name": "setChange",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6379,
                        "src": "20710:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                          "typeString": "function (uint8,uint8) pure returns (uint8)"
                        }
                      },
                      "id": 7306,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20710:98:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "20669:139:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 7308,
                  "nodeType": "ExpressionStatement",
                  "src": "20669:139:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7310,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7260,
                        "src": "20845:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7309,
                      "name": "LogVoucherRefunded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6549,
                      "src": "20826:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 7311,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20826:35:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7312,
                  "nodeType": "EmitStatement",
                  "src": "20821:40:6"
                }
              ]
            },
            "documentation": {
              "id": 7258,
              "nodeType": "StructuredDocumentation",
              "src": "19883:170:6",
              "text": " @notice Refunding a voucher\n @param _tokenIdVoucher   ID of the voucher\n @param _msgSender   account called the fn from the BR contract"
            },
            "functionSelector": "7ad226dc",
            "id": 7314,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7266,
                "modifierName": {
                  "id": 7265,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11999,
                  "src": "20165:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20165:13:6"
              },
              {
                "id": 7268,
                "modifierName": {
                  "id": 7267,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "20188:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20188:14:6"
              },
              {
                "arguments": [
                  {
                    "id": 7270,
                    "name": "_tokenIdVoucher",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7260,
                    "src": "20229:15:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "id": 7271,
                    "name": "_msgSender",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7262,
                    "src": "20246:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7272,
                "modifierName": {
                  "id": 7269,
                  "name": "onlyVoucherOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6669,
                  "src": "20212:16:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$_t_address_$",
                    "typeString": "modifier (uint256,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20212:45:6"
              }
            ],
            "name": "refund",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7264,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "20147:8:6"
            },
            "parameters": {
              "id": 7263,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7260,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 7314,
                  "src": "20075:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7259,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20075:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7262,
                  "mutability": "mutable",
                  "name": "_msgSender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7314,
                  "src": "20100:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7261,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20100:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20074:45:6"
            },
            "returnParameters": {
              "id": 7273,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20263:0:6"
            },
            "scope": 8535,
            "src": "20059:810:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9387
            ],
            "body": {
              "id": 7554,
              "nodeType": "Block",
              "src": "21270:4132:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7339,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "21303:63:6",
                        "subExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 7333,
                                  "name": "vouchersStatus",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6463,
                                  "src": "21313:14:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                    "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                  }
                                },
                                "id": 7335,
                                "indexExpression": {
                                  "id": 7334,
                                  "name": "_tokenIdVoucher",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7317,
                                  "src": "21328:15:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "21313:31:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                  "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                }
                              },
                              "id": 7336,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "status",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6259,
                              "src": "21313:38:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 7337,
                              "name": "IDX_COMPLAIN",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6208,
                              "src": "21353:12:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 7332,
                            "name": "isStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6361,
                            "src": "21304:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8,uint8) pure returns (bool)"
                            }
                          },
                          "id": 7338,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21304:62:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f434f4d504c41494e4544",
                        "id": 7340,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21381:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_53494b53c753dedbccdbfa0c63e99e92e800f4df9983b45d49261662c2354c30",
                          "typeString": "literal_string \"ALREADY_COMPLAINED\""
                        },
                        "value": "ALREADY_COMPLAINED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_53494b53c753dedbccdbfa0c63e99e92e800f4df9983b45d49261662c2354c30",
                          "typeString": "literal_string \"ALREADY_COMPLAINED\""
                        }
                      ],
                      "id": 7331,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "21281:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21281:131:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7342,
                  "nodeType": "ExpressionStatement",
                  "src": "21281:131:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7351,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "21527:60:6",
                        "subExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 7345,
                                  "name": "vouchersStatus",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6463,
                                  "src": "21537:14:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                    "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                  }
                                },
                                "id": 7347,
                                "indexExpression": {
                                  "id": 7346,
                                  "name": "_tokenIdVoucher",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7317,
                                  "src": "21552:15:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "21537:31:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                  "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                }
                              },
                              "id": 7348,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "status",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6259,
                              "src": "21537:38:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 7349,
                              "name": "IDX_FINAL",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6214,
                              "src": "21577:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 7344,
                            "name": "isStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6361,
                            "src": "21528:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8,uint8) pure returns (bool)"
                            }
                          },
                          "id": 7350,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21528:59:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f46494e414c495a4544",
                        "id": 7352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21602:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a84b963af821bd2b41d802daa2c7840123c5cf834cde12aa10bdce75ff0df2d9",
                          "typeString": "literal_string \"ALREADY_FINALIZED\""
                        },
                        "value": "ALREADY_FINALIZED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a84b963af821bd2b41d802daa2c7840123c5cf834cde12aa10bdce75ff0df2d9",
                          "typeString": "literal_string \"ALREADY_FINALIZED\""
                        }
                      ],
                      "id": 7343,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "21505:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21505:127:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7354,
                  "nodeType": "ExpressionStatement",
                  "src": "21505:127:6"
                },
                {
                  "assignments": [
                    7356
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7356,
                      "mutability": "mutable",
                      "name": "tPromise",
                      "nodeType": "VariableDeclaration",
                      "scope": 7554,
                      "src": "21776:23:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                        "typeString": "struct VoucherKernel.Promise"
                      },
                      "typeName": {
                        "id": 7355,
                        "name": "Promise",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6429,
                        "src": "21776:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Promise_$6429_storage_ptr",
                          "typeString": "struct VoucherKernel.Promise"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7362,
                  "initialValue": {
                    "baseExpression": {
                      "id": 7357,
                      "name": "promises",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6444,
                      "src": "21815:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                        "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                      }
                    },
                    "id": 7361,
                    "indexExpression": {
                      "arguments": [
                        {
                          "id": 7359,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7317,
                          "src": "21850:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7358,
                        "name": "getPromiseIdFromVoucherId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8260,
                        "src": "21824:25:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (uint256) view returns (bytes32)"
                        }
                      },
                      "id": 7360,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21824:42:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "21815:52:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                      "typeString": "struct VoucherKernel.Promise storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21776:91:6"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 7364,
                              "name": "vouchersStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6463,
                              "src": "21957:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                              }
                            },
                            "id": 7366,
                            "indexExpression": {
                              "id": 7365,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7317,
                              "src": "21972:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "21957:31:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                            }
                          },
                          "id": 7367,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6259,
                          "src": "21957:38:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7363,
                        "name": "isStateRedemptionSigned",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6303,
                        "src": "21933:23:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                          "typeString": "function (uint8) pure returns (bool)"
                        }
                      },
                      "id": 7368,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21933:63:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 7370,
                              "name": "vouchersStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6463,
                              "src": "22029:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                              }
                            },
                            "id": 7372,
                            "indexExpression": {
                              "id": 7371,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7317,
                              "src": "22044:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "22029:31:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                            }
                          },
                          "id": 7373,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6259,
                          "src": "22029:38:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7369,
                        "name": "isStateRefunded",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6322,
                        "src": "22013:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                          "typeString": "function (uint8) pure returns (bool)"
                        }
                      },
                      "id": 7374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22013:55:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "21933:135:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 7442,
                              "name": "vouchersStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6463,
                              "src": "23412:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                              }
                            },
                            "id": 7444,
                            "indexExpression": {
                              "id": 7443,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7317,
                              "src": "23427:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "23412:31:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                            }
                          },
                          "id": 7445,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6259,
                          "src": "23412:38:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7441,
                        "name": "isStateExpired",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6341,
                        "src": "23397:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                          "typeString": "function (uint8) pure returns (bool)"
                        }
                      },
                      "id": 7446,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23397:54:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "arguments": [
                          {
                            "expression": {
                              "baseExpression": {
                                "id": 7509,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "24617:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 7511,
                              "indexExpression": {
                                "id": 7510,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7317,
                                "src": "24632:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "24617:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 7512,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "status",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6259,
                            "src": "24617:38:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          {
                            "id": 7513,
                            "name": "IDX_CANCEL_FAULT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6211,
                            "src": "24657:16:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 7508,
                          "name": "isStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6361,
                          "src": "24608:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                            "typeString": "function (uint8,uint8) pure returns (bool)"
                          }
                        },
                        "id": 7514,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24608:66:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 7550,
                        "nodeType": "Block",
                        "src": "25243:152:6",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "hexValue": "494e4150504c494341424c455f535441545553",
                                  "id": 7547,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "25265:21:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_d0faf1dea07f76cde9f53f3359618f66541a0b51c05040e220f0377fad18fdb4",
                                    "typeString": "literal_string \"INAPPLICABLE_STATUS\""
                                  },
                                  "value": "INAPPLICABLE_STATUS"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_d0faf1dea07f76cde9f53f3359618f66541a0b51c05040e220f0377fad18fdb4",
                                    "typeString": "literal_string \"INAPPLICABLE_STATUS\""
                                  }
                                ],
                                "id": 7546,
                                "name": "revert",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -19,
                                  -19
                                ],
                                "referencedDeclaration": -19,
                                "src": "25258:6:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (string memory) pure"
                                }
                              },
                              "id": 7548,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25258:29:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 7549,
                            "nodeType": "ExpressionStatement",
                            "src": "25258:29:6"
                          }
                        ]
                      },
                      "id": 7551,
                      "nodeType": "IfStatement",
                      "src": "24590:805:6",
                      "trueBody": {
                        "id": 7545,
                        "nodeType": "Block",
                        "src": "24686:551:6",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7524,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 7516,
                                      "name": "block",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -4,
                                      "src": "24727:5:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_block",
                                        "typeString": "block"
                                      }
                                    },
                                    "id": 7517,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "timestamp",
                                    "nodeType": "MemberAccess",
                                    "src": "24727:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<=",
                                  "rightExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7523,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "baseExpression": {
                                          "id": 7518,
                                          "name": "vouchersStatus",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6463,
                                          "src": "24767:14:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                          }
                                        },
                                        "id": 7520,
                                        "indexExpression": {
                                          "id": 7519,
                                          "name": "_tokenIdVoucher",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7317,
                                          "src": "24782:15:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "24767:31:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                        }
                                      },
                                      "id": 7521,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "complainPeriodStart",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 6265,
                                      "src": "24767:51:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 7522,
                                      "name": "complainPeriod",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6507,
                                      "src": "24846:14:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "24767:93:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "24727:133:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "hexValue": "434f4d504c41494e504552494f445f45585049524544",
                                  "id": 7525,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "24879:24:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                    "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                  },
                                  "value": "COMPLAINPERIOD_EXPIRED"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                    "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                  }
                                ],
                                "id": 7515,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "24701:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 7526,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24701:217:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 7527,
                            "nodeType": "ExpressionStatement",
                            "src": "24701:217:6"
                          },
                          {
                            "expression": {
                              "id": 7539,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 7528,
                                    "name": "vouchersStatus",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6463,
                                    "src": "25015:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                      "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                    }
                                  },
                                  "id": 7530,
                                  "indexExpression": {
                                    "id": 7529,
                                    "name": "_tokenIdVoucher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7317,
                                    "src": "25030:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "25015:31:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                    "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                  }
                                },
                                "id": 7531,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "status",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6259,
                                "src": "25015:38:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 7533,
                                        "name": "vouchersStatus",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6463,
                                        "src": "25084:14:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                          "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                        }
                                      },
                                      "id": 7535,
                                      "indexExpression": {
                                        "id": 7534,
                                        "name": "_tokenIdVoucher",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7317,
                                        "src": "25099:15:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "25084:31:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                        "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                      }
                                    },
                                    "id": 7536,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "status",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6259,
                                    "src": "25084:38:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "id": 7537,
                                    "name": "IDX_COMPLAIN",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6208,
                                    "src": "25141:12:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  ],
                                  "id": 7532,
                                  "name": "setChange",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6379,
                                  "src": "25056:9:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                                    "typeString": "function (uint8,uint8) pure returns (uint8)"
                                  }
                                },
                                "id": 7538,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25056:112:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "25015:153:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "id": 7540,
                            "nodeType": "ExpressionStatement",
                            "src": "25015:153:6"
                          },
                          {
                            "eventCall": {
                              "arguments": [
                                {
                                  "id": 7542,
                                  "name": "_tokenIdVoucher",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7317,
                                  "src": "25209:15:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7541,
                                "name": "LogVoucherComplain",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6553,
                                "src": "25190:18:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                  "typeString": "function (uint256)"
                                }
                              },
                              "id": 7543,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25190:35:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 7544,
                            "nodeType": "EmitStatement",
                            "src": "25185:40:6"
                          }
                        ]
                      }
                    },
                    "id": 7552,
                    "nodeType": "IfStatement",
                    "src": "23393:2002:6",
                    "trueBody": {
                      "id": 7507,
                      "nodeType": "Block",
                      "src": "23453:1131:6",
                      "statements": [
                        {
                          "condition": {
                            "id": 7454,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "23490:128:6",
                            "subExpression": {
                              "arguments": [
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 7448,
                                      "name": "vouchersStatus",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6463,
                                      "src": "23522:14:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                        "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                      }
                                    },
                                    "id": 7450,
                                    "indexExpression": {
                                      "id": 7449,
                                      "name": "_tokenIdVoucher",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7317,
                                      "src": "23537:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "23522:31:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                      "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                    }
                                  },
                                  "id": 7451,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "status",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6259,
                                  "src": "23522:38:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "id": 7452,
                                  "name": "IDX_CANCEL_FAULT",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6211,
                                  "src": "23583:16:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                ],
                                "id": 7447,
                                "name": "isStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6361,
                                "src": "23491:8:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                                  "typeString": "function (uint8,uint8) pure returns (bool)"
                                }
                              },
                              "id": 7453,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23491:127:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "id": 7480,
                            "nodeType": "Block",
                            "src": "23946:261:6",
                            "statements": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7476,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 7470,
                                          "name": "block",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -4,
                                          "src": "23995:5:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_block",
                                            "typeString": "block"
                                          }
                                        },
                                        "id": 7471,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "timestamp",
                                        "nodeType": "MemberAccess",
                                        "src": "23995:15:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7475,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "id": 7472,
                                            "name": "tPromise",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7356,
                                            "src": "24014:8:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                                              "typeString": "struct VoucherKernel.Promise memory"
                                            }
                                          },
                                          "id": 7473,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "validTo",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6420,
                                          "src": "24014:16:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 7474,
                                          "name": "complainPeriod",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6507,
                                          "src": "24033:14:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "24014:33:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "23995:52:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    {
                                      "hexValue": "434f4d504c41494e504552494f445f45585049524544",
                                      "id": 7477,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "24070:24:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                        "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                      },
                                      "value": "COMPLAINPERIOD_EXPIRED"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                        "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                      }
                                    ],
                                    "id": 7469,
                                    "name": "require",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -18,
                                      -18
                                    ],
                                    "referencedDeclaration": -18,
                                    "src": "23965:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                      "typeString": "function (bool,string memory) pure"
                                    }
                                  },
                                  "id": 7478,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "23965:148:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 7479,
                                "nodeType": "ExpressionStatement",
                                "src": "23965:148:6"
                              }
                            ]
                          },
                          "id": 7481,
                          "nodeType": "IfStatement",
                          "src": "23468:739:6",
                          "trueBody": {
                            "id": 7468,
                            "nodeType": "Block",
                            "src": "23634:306:6",
                            "statements": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7464,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 7456,
                                          "name": "block",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -4,
                                          "src": "23683:5:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_block",
                                            "typeString": "block"
                                          }
                                        },
                                        "id": 7457,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "timestamp",
                                        "nodeType": "MemberAccess",
                                        "src": "23683:15:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7463,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 7461,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "expression": {
                                              "id": 7458,
                                              "name": "tPromise",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7356,
                                              "src": "23727:8:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                                                "typeString": "struct VoucherKernel.Promise memory"
                                              }
                                            },
                                            "id": 7459,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "validTo",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6420,
                                            "src": "23727:16:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "+",
                                          "rightExpression": {
                                            "id": 7460,
                                            "name": "complainPeriod",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6507,
                                            "src": "23746:14:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "23727:33:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 7462,
                                          "name": "cancelFaultPeriod",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6509,
                                          "src": "23763:17:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "23727:53:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "23683:97:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    {
                                      "hexValue": "434f4d504c41494e504552494f445f45585049524544",
                                      "id": 7465,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "23803:24:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                        "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                      },
                                      "value": "COMPLAINPERIOD_EXPIRED"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                        "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                      }
                                    ],
                                    "id": 7455,
                                    "name": "require",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -18,
                                      -18
                                    ],
                                    "referencedDeclaration": -18,
                                    "src": "23653:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                      "typeString": "function (bool,string memory) pure"
                                    }
                                  },
                                  "id": 7466,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "23653:193:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 7467,
                                "nodeType": "ExpressionStatement",
                                "src": "23653:193:6"
                              }
                            ]
                          }
                        },
                        {
                          "expression": {
                            "id": 7488,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "expression": {
                                "baseExpression": {
                                  "id": 7482,
                                  "name": "vouchersStatus",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6463,
                                  "src": "24223:14:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                    "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                  }
                                },
                                "id": 7484,
                                "indexExpression": {
                                  "id": 7483,
                                  "name": "_tokenIdVoucher",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7317,
                                  "src": "24238:15:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "24223:31:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                  "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                }
                              },
                              "id": 7485,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "memberName": "cancelFaultPeriodStart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6267,
                              "src": "24223:54:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "expression": {
                                "id": 7486,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "24280:5:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 7487,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "24280:33:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "24223:90:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7489,
                          "nodeType": "ExpressionStatement",
                          "src": "24223:90:6"
                        },
                        {
                          "expression": {
                            "id": 7501,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "expression": {
                                "baseExpression": {
                                  "id": 7490,
                                  "name": "vouchersStatus",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6463,
                                  "src": "24328:14:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                    "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                  }
                                },
                                "id": 7492,
                                "indexExpression": {
                                  "id": 7491,
                                  "name": "_tokenIdVoucher",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7317,
                                  "src": "24343:15:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "24328:31:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                  "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                }
                              },
                              "id": 7493,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "memberName": "status",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6259,
                              "src": "24328:38:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "arguments": [
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 7495,
                                      "name": "vouchersStatus",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6463,
                                      "src": "24397:14:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                        "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                      }
                                    },
                                    "id": 7497,
                                    "indexExpression": {
                                      "id": 7496,
                                      "name": "_tokenIdVoucher",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7317,
                                      "src": "24412:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "24397:31:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                      "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                    }
                                  },
                                  "id": 7498,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "status",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6259,
                                  "src": "24397:38:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "id": 7499,
                                  "name": "IDX_COMPLAIN",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6208,
                                  "src": "24454:12:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                ],
                                "id": 7494,
                                "name": "setChange",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6379,
                                "src": "24369:9:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                                  "typeString": "function (uint8,uint8) pure returns (uint8)"
                                }
                              },
                              "id": 7500,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24369:112:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "src": "24328:153:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "id": 7502,
                          "nodeType": "ExpressionStatement",
                          "src": "24328:153:6"
                        },
                        {
                          "eventCall": {
                            "arguments": [
                              {
                                "id": 7504,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7317,
                                "src": "24522:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7503,
                              "name": "LogVoucherComplain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6553,
                              "src": "24503:18:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                "typeString": "function (uint256)"
                              }
                            },
                            "id": 7505,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24503:35:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7506,
                          "nodeType": "EmitStatement",
                          "src": "24498:40:6"
                        }
                      ]
                    }
                  },
                  "id": 7553,
                  "nodeType": "IfStatement",
                  "src": "21915:3480:6",
                  "trueBody": {
                    "id": 7440,
                    "nodeType": "Block",
                    "src": "22080:1307:6",
                    "statements": [
                      {
                        "condition": {
                          "id": 7383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "22117:128:6",
                          "subExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 7377,
                                    "name": "vouchersStatus",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6463,
                                    "src": "22149:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                      "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                    }
                                  },
                                  "id": 7379,
                                  "indexExpression": {
                                    "id": 7378,
                                    "name": "_tokenIdVoucher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7317,
                                    "src": "22164:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "22149:31:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                    "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                  }
                                },
                                "id": 7380,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "status",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6259,
                                "src": "22149:38:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "id": 7381,
                                "name": "IDX_CANCEL_FAULT",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6211,
                                "src": "22210:16:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 7376,
                              "name": "isStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6361,
                              "src": "22118:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                                "typeString": "function (uint8,uint8) pure returns (bool)"
                              }
                            },
                            "id": 7382,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22118:127:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 7413,
                          "nodeType": "Block",
                          "src": "22666:350:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7409,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 7401,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "22715:5:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 7402,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "src": "22715:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7408,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 7403,
                                            "name": "vouchersStatus",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6463,
                                            "src": "22759:14:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                              "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                            }
                                          },
                                          "id": 7405,
                                          "indexExpression": {
                                            "id": 7404,
                                            "name": "_tokenIdVoucher",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7317,
                                            "src": "22774:15:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "22759:31:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                            "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                          }
                                        },
                                        "id": 7406,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "complainPeriodStart",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6265,
                                        "src": "22759:51:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "id": 7407,
                                        "name": "complainPeriod",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6507,
                                        "src": "22842:14:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "22759:97:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "22715:141:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "434f4d504c41494e504552494f445f45585049524544",
                                    "id": 7410,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "22879:24:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                      "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                    },
                                    "value": "COMPLAINPERIOD_EXPIRED"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                      "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                    }
                                  ],
                                  "id": 7400,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "22685:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 7411,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22685:237:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7412,
                              "nodeType": "ExpressionStatement",
                              "src": "22685:237:6"
                            }
                          ]
                        },
                        "id": 7414,
                        "nodeType": "IfStatement",
                        "src": "22095:921:6",
                        "trueBody": {
                          "id": 7399,
                          "nodeType": "Block",
                          "src": "22261:399:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7395,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 7385,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "22310:5:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 7386,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "src": "22310:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7394,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7392,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "baseExpression": {
                                              "id": 7387,
                                              "name": "vouchersStatus",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6463,
                                              "src": "22354:14:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                              }
                                            },
                                            "id": 7389,
                                            "indexExpression": {
                                              "id": 7388,
                                              "name": "_tokenIdVoucher",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7317,
                                              "src": "22369:15:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "22354:31:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                            }
                                          },
                                          "id": 7390,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "complainPeriodStart",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6265,
                                          "src": "22354:51:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 7391,
                                          "name": "complainPeriod",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6507,
                                          "src": "22437:14:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "22354:97:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "id": 7393,
                                        "name": "cancelFaultPeriod",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6509,
                                        "src": "22483:17:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "22354:146:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "22310:190:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "434f4d504c41494e504552494f445f45585049524544",
                                    "id": 7396,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "22523:24:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                      "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                    },
                                    "value": "COMPLAINPERIOD_EXPIRED"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                      "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                    }
                                  ],
                                  "id": 7384,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "22280:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 7397,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22280:286:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7398,
                              "nodeType": "ExpressionStatement",
                              "src": "22280:286:6"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 7421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 7415,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "23032:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 7417,
                              "indexExpression": {
                                "id": 7416,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7317,
                                "src": "23047:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "23032:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 7418,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "cancelFaultPeriodStart",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6267,
                            "src": "23032:54:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 7419,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "23089:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 7420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "23089:33:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23032:90:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7422,
                        "nodeType": "ExpressionStatement",
                        "src": "23032:90:6"
                      },
                      {
                        "expression": {
                          "id": 7434,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 7423,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "23137:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 7425,
                              "indexExpression": {
                                "id": 7424,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7317,
                                "src": "23152:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "23137:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 7426,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "status",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6259,
                            "src": "23137:38:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 7428,
                                    "name": "vouchersStatus",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6463,
                                    "src": "23206:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                      "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                    }
                                  },
                                  "id": 7430,
                                  "indexExpression": {
                                    "id": 7429,
                                    "name": "_tokenIdVoucher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7317,
                                    "src": "23221:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "23206:31:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                    "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                  }
                                },
                                "id": 7431,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "status",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6259,
                                "src": "23206:38:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "id": 7432,
                                "name": "IDX_COMPLAIN",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6208,
                                "src": "23263:12:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 7427,
                              "name": "setChange",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6379,
                              "src": "23178:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                                "typeString": "function (uint8,uint8) pure returns (uint8)"
                              }
                            },
                            "id": 7433,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23178:112:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "23137:153:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 7435,
                        "nodeType": "ExpressionStatement",
                        "src": "23137:153:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 7437,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7317,
                              "src": "23331:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7436,
                            "name": "LogVoucherComplain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6553,
                            "src": "23312:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 7438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23312:35:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7439,
                        "nodeType": "EmitStatement",
                        "src": "23307:40:6"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 7315,
              "nodeType": "StructuredDocumentation",
              "src": "20877:181:6",
              "text": " @notice Issue a complain for a voucher\n @param _tokenIdVoucher   ID of the voucher\n @param _msgSender   account called the fn from the BR contract"
            },
            "functionSelector": "66db9a09",
            "id": 7555,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7323,
                "modifierName": {
                  "id": 7322,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11999,
                  "src": "21172:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21172:13:6"
              },
              {
                "id": 7325,
                "modifierName": {
                  "id": 7324,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "21195:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21195:14:6"
              },
              {
                "arguments": [
                  {
                    "id": 7327,
                    "name": "_tokenIdVoucher",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7317,
                    "src": "21236:15:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "id": 7328,
                    "name": "_msgSender",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7319,
                    "src": "21253:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7329,
                "modifierName": {
                  "id": 7326,
                  "name": "onlyVoucherOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6669,
                  "src": "21219:16:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$_t_address_$",
                    "typeString": "modifier (uint256,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21219:45:6"
              }
            ],
            "name": "complain",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7321,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "21154:8:6"
            },
            "parameters": {
              "id": 7320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7317,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 7555,
                  "src": "21082:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7316,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21082:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7319,
                  "mutability": "mutable",
                  "name": "_msgSender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7555,
                  "src": "21107:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7318,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21107:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21081:45:6"
            },
            "returnParameters": {
              "id": 7330,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21270:0:6"
            },
            "scope": 8535,
            "src": "21064:4338:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9395
            ],
            "body": {
              "id": 7754,
              "nodeType": "Block",
              "src": "25715:3435:6",
              "statements": [
                {
                  "assignments": [
                    7567
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7567,
                      "mutability": "mutable",
                      "name": "tokenIdSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 7754,
                      "src": "25726:21:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7566,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "25726:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7571,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 7569,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7558,
                        "src": "25773:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7568,
                      "name": "getIdSupplyFromVoucher",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8230,
                      "src": "25750:22:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7570,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25750:39:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25726:63:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7577,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 7574,
                              "name": "tokenIdSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7567,
                              "src": "25838:13:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7573,
                            "name": "getSupplyHolder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8429,
                            "src": "25822:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 7575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25822:30:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 7576,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7560,
                          "src": "25856:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "25822:44:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f434f46",
                        "id": 7578,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "25881:18:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b9f9f283f8fc428e60cb969208985ed8e7933a404e10a1705db091f62778085a",
                          "typeString": "literal_string \"UNAUTHORIZED_COF\""
                        },
                        "value": "UNAUTHORIZED_COF"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b9f9f283f8fc428e60cb969208985ed8e7933a404e10a1705db091f62778085a",
                          "typeString": "literal_string \"UNAUTHORIZED_COF\""
                        }
                      ],
                      "id": 7572,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "25800:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25800:110:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7580,
                  "nodeType": "ExpressionStatement",
                  "src": "25800:110:6"
                },
                {
                  "assignments": [
                    7582
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7582,
                      "mutability": "mutable",
                      "name": "tStatus",
                      "nodeType": "VariableDeclaration",
                      "scope": 7754,
                      "src": "26007:13:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 7581,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "26007:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7587,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 7583,
                        "name": "vouchersStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6463,
                        "src": "26023:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                          "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                        }
                      },
                      "id": 7585,
                      "indexExpression": {
                        "id": 7584,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7558,
                        "src": "26038:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "26023:31:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                        "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                      }
                    },
                    "id": 7586,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "status",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6259,
                    "src": "26023:38:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26007:54:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7593,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "26082:36:6",
                        "subExpression": {
                          "arguments": [
                            {
                              "id": 7590,
                              "name": "tStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7582,
                              "src": "26092:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 7591,
                              "name": "IDX_CANCEL_FAULT",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6211,
                              "src": "26101:16:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 7589,
                            "name": "isStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6361,
                            "src": "26083:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8,uint8) pure returns (bool)"
                            }
                          },
                          "id": 7592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26083:35:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f43414e43454c4641554c54",
                        "id": 7594,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "26120:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f70a5f26a12584c06a5ed05cce48137219718140f1a56ac906bad6e55eaaeb1e",
                          "typeString": "literal_string \"ALREADY_CANCELFAULT\""
                        },
                        "value": "ALREADY_CANCELFAULT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f70a5f26a12584c06a5ed05cce48137219718140f1a56ac906bad6e55eaaeb1e",
                          "typeString": "literal_string \"ALREADY_CANCELFAULT\""
                        }
                      ],
                      "id": 7588,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "26074:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26074:68:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7596,
                  "nodeType": "ExpressionStatement",
                  "src": "26074:68:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7602,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "26243:29:6",
                        "subExpression": {
                          "arguments": [
                            {
                              "id": 7599,
                              "name": "tStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7582,
                              "src": "26253:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 7600,
                              "name": "IDX_FINAL",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6214,
                              "src": "26262:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 7598,
                            "name": "isStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6361,
                            "src": "26244:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8,uint8) pure returns (bool)"
                            }
                          },
                          "id": 7601,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26244:28:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f46494e414c495a4544",
                        "id": 7603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "26274:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a84b963af821bd2b41d802daa2c7840123c5cf834cde12aa10bdce75ff0df2d9",
                          "typeString": "literal_string \"ALREADY_FINALIZED\""
                        },
                        "value": "ALREADY_FINALIZED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a84b963af821bd2b41d802daa2c7840123c5cf834cde12aa10bdce75ff0df2d9",
                          "typeString": "literal_string \"ALREADY_FINALIZED\""
                        }
                      ],
                      "id": 7597,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "26235:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26235:59:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7605,
                  "nodeType": "ExpressionStatement",
                  "src": "26235:59:6"
                },
                {
                  "assignments": [
                    7607
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7607,
                      "mutability": "mutable",
                      "name": "tPromise",
                      "nodeType": "VariableDeclaration",
                      "scope": 7754,
                      "src": "26389:23:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                        "typeString": "struct VoucherKernel.Promise"
                      },
                      "typeName": {
                        "id": 7606,
                        "name": "Promise",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6429,
                        "src": "26389:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Promise_$6429_storage_ptr",
                          "typeString": "struct VoucherKernel.Promise"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7613,
                  "initialValue": {
                    "baseExpression": {
                      "id": 7608,
                      "name": "promises",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6444,
                      "src": "26428:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                        "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                      }
                    },
                    "id": 7612,
                    "indexExpression": {
                      "arguments": [
                        {
                          "id": 7610,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7558,
                          "src": "26463:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7609,
                        "name": "getPromiseIdFromVoucherId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8260,
                        "src": "26437:25:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (uint256) view returns (bytes32)"
                        }
                      },
                      "id": 7611,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26437:42:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "26428:52:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                      "typeString": "struct VoucherKernel.Promise storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26389:91:6"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7622,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 7615,
                          "name": "tStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7582,
                          "src": "26506:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 7616,
                          "name": "IDX_REDEEM",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6199,
                          "src": "26515:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7614,
                        "name": "isStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6361,
                        "src": "26497:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                          "typeString": "function (uint8,uint8) pure returns (bool)"
                        }
                      },
                      "id": 7617,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26497:29:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 7619,
                          "name": "tStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7582,
                          "src": "26539:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 7620,
                          "name": "IDX_REFUND",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6202,
                          "src": "26548:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7618,
                        "name": "isStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6361,
                        "src": "26530:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                          "typeString": "function (uint8,uint8) pure returns (bool)"
                        }
                      },
                      "id": 7621,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26530:29:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "26497:62:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "arguments": [
                        {
                          "id": 7669,
                          "name": "tStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7582,
                          "src": "27576:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 7670,
                          "name": "IDX_EXPIRE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6205,
                          "src": "27585:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7668,
                        "name": "isStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6361,
                        "src": "27567:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                          "typeString": "function (uint8,uint8) pure returns (bool)"
                        }
                      },
                      "id": 7671,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27567:29:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "arguments": [
                          {
                            "id": 7708,
                            "name": "tStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7582,
                            "src": "28373:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 7707,
                          "name": "isStateCommitted",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6284,
                          "src": "28356:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                            "typeString": "function (uint8) pure returns (bool)"
                          }
                        },
                        "id": 7709,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "28356:25:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 7736,
                        "nodeType": "Block",
                        "src": "28808:152:6",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "hexValue": "494e4150504c494341424c455f535441545553",
                                  "id": 7733,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "28830:21:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_d0faf1dea07f76cde9f53f3359618f66541a0b51c05040e220f0377fad18fdb4",
                                    "typeString": "literal_string \"INAPPLICABLE_STATUS\""
                                  },
                                  "value": "INAPPLICABLE_STATUS"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_d0faf1dea07f76cde9f53f3359618f66541a0b51c05040e220f0377fad18fdb4",
                                    "typeString": "literal_string \"INAPPLICABLE_STATUS\""
                                  }
                                ],
                                "id": 7732,
                                "name": "revert",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -19,
                                  -19
                                ],
                                "referencedDeclaration": -19,
                                "src": "28823:6:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (string memory) pure"
                                }
                              },
                              "id": 7734,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "28823:29:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 7735,
                            "nodeType": "ExpressionStatement",
                            "src": "28823:29:6"
                          }
                        ]
                      },
                      "id": 7737,
                      "nodeType": "IfStatement",
                      "src": "28352:608:6",
                      "trueBody": {
                        "id": 7731,
                        "nodeType": "Block",
                        "src": "28383:419:6",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7719,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 7711,
                                      "name": "block",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -4,
                                      "src": "28457:5:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_block",
                                        "typeString": "block"
                                      }
                                    },
                                    "id": 7712,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "timestamp",
                                    "nodeType": "MemberAccess",
                                    "src": "28457:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<=",
                                  "rightExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7718,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7716,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 7713,
                                          "name": "tPromise",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7607,
                                          "src": "28497:8:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                                            "typeString": "struct VoucherKernel.Promise memory"
                                          }
                                        },
                                        "id": 7714,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "validTo",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6420,
                                        "src": "28497:16:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "id": 7715,
                                        "name": "complainPeriod",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6507,
                                        "src": "28516:14:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "28497:33:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 7717,
                                      "name": "cancelFaultPeriod",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6509,
                                      "src": "28533:17:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "28497:53:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "28457:93:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "hexValue": "434f46504552494f445f45585049524544",
                                  "id": 7720,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "28569:19:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                    "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                  },
                                  "value": "COFPERIOD_EXPIRED"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                    "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                  }
                                ],
                                "id": 7710,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "28431:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 7721,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "28431:172:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 7722,
                            "nodeType": "ExpressionStatement",
                            "src": "28431:172:6"
                          },
                          {
                            "expression": {
                              "id": 7729,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 7723,
                                    "name": "vouchersStatus",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6463,
                                    "src": "28696:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                      "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                    }
                                  },
                                  "id": 7725,
                                  "indexExpression": {
                                    "id": 7724,
                                    "name": "_tokenIdVoucher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7558,
                                    "src": "28711:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "28696:31:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                    "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                  }
                                },
                                "id": 7726,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "complainPeriodStart",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6265,
                                "src": "28696:51:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "expression": {
                                  "id": 7727,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "28750:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 7728,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "28750:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "28696:69:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7730,
                            "nodeType": "ExpressionStatement",
                            "src": "28696:69:6"
                          }
                        ]
                      }
                    },
                    "id": 7738,
                    "nodeType": "IfStatement",
                    "src": "27563:1397:6",
                    "trueBody": {
                      "id": 7706,
                      "nodeType": "Block",
                      "src": "27598:748:6",
                      "statements": [
                        {
                          "condition": {
                            "id": 7676,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "27643:32:6",
                            "subExpression": {
                              "arguments": [
                                {
                                  "id": 7673,
                                  "name": "tStatus",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7582,
                                  "src": "27653:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "id": 7674,
                                  "name": "IDX_COMPLAIN",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6208,
                                  "src": "27662:12:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                ],
                                "id": 7672,
                                "name": "isStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6361,
                                "src": "27644:8:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                                  "typeString": "function (uint8,uint8) pure returns (bool)"
                                }
                              },
                              "id": 7675,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "27644:31:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "id": 7704,
                            "nodeType": "Block",
                            "src": "27984:351:6",
                            "statements": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7700,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 7692,
                                          "name": "block",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -4,
                                          "src": "28033:5:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_block",
                                            "typeString": "block"
                                          }
                                        },
                                        "id": 7693,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "timestamp",
                                        "nodeType": "MemberAccess",
                                        "src": "28033:15:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7699,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "baseExpression": {
                                              "id": 7694,
                                              "name": "vouchersStatus",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6463,
                                              "src": "28077:14:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                              }
                                            },
                                            "id": 7696,
                                            "indexExpression": {
                                              "id": 7695,
                                              "name": "_tokenIdVoucher",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7558,
                                              "src": "28092:15:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "28077:31:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                            }
                                          },
                                          "id": 7697,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "cancelFaultPeriodStart",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6267,
                                          "src": "28077:54:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 7698,
                                          "name": "cancelFaultPeriod",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6509,
                                          "src": "28163:17:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "28077:103:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "28033:147:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    {
                                      "hexValue": "434f46504552494f445f45585049524544",
                                      "id": 7701,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "28203:19:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                        "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                      },
                                      "value": "COFPERIOD_EXPIRED"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                        "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                      }
                                    ],
                                    "id": 7691,
                                    "name": "require",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -18,
                                      -18
                                    ],
                                    "referencedDeclaration": -18,
                                    "src": "28003:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                      "typeString": "function (bool,string memory) pure"
                                    }
                                  },
                                  "id": 7702,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "28003:238:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 7703,
                                "nodeType": "ExpressionStatement",
                                "src": "28003:238:6"
                              }
                            ]
                          },
                          "id": 7705,
                          "nodeType": "IfStatement",
                          "src": "27639:696:6",
                          "trueBody": {
                            "id": 7690,
                            "nodeType": "Block",
                            "src": "27677:301:6",
                            "statements": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7686,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 7678,
                                          "name": "block",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -4,
                                          "src": "27726:5:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_block",
                                            "typeString": "block"
                                          }
                                        },
                                        "id": 7679,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "timestamp",
                                        "nodeType": "MemberAccess",
                                        "src": "27726:15:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7685,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 7683,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "expression": {
                                              "id": 7680,
                                              "name": "tPromise",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7607,
                                              "src": "27770:8:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                                                "typeString": "struct VoucherKernel.Promise memory"
                                              }
                                            },
                                            "id": 7681,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "validTo",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6420,
                                            "src": "27770:16:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "+",
                                          "rightExpression": {
                                            "id": 7682,
                                            "name": "complainPeriod",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6507,
                                            "src": "27789:14:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "27770:33:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 7684,
                                          "name": "cancelFaultPeriod",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6509,
                                          "src": "27806:17:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "27770:53:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "27726:97:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    {
                                      "hexValue": "434f46504552494f445f45585049524544",
                                      "id": 7687,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "27846:19:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                        "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                      },
                                      "value": "COFPERIOD_EXPIRED"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                        "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                      }
                                    ],
                                    "id": 7677,
                                    "name": "require",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -18,
                                      -18
                                    ],
                                    "referencedDeclaration": -18,
                                    "src": "27696:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                      "typeString": "function (bool,string memory) pure"
                                    }
                                  },
                                  "id": 7688,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "27696:188:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 7689,
                                "nodeType": "ExpressionStatement",
                                "src": "27696:188:6"
                              }
                            ]
                          }
                        }
                      ]
                    }
                  },
                  "id": 7739,
                  "nodeType": "IfStatement",
                  "src": "26493:2467:6",
                  "trueBody": {
                    "id": 7667,
                    "nodeType": "Block",
                    "src": "26561:996:6",
                    "statements": [
                      {
                        "condition": {
                          "id": 7627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "26619:32:6",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 7624,
                                "name": "tStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7582,
                                "src": "26629:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "id": 7625,
                                "name": "IDX_COMPLAIN",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6208,
                                "src": "26638:12:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 7623,
                              "name": "isStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6361,
                              "src": "26620:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                                "typeString": "function (uint8,uint8) pure returns (bool)"
                              }
                            },
                            "id": 7626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26620:31:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 7665,
                          "nodeType": "Block",
                          "src": "27195:351:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7661,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 7653,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "27244:5:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 7654,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "src": "27244:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7660,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 7655,
                                            "name": "vouchersStatus",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6463,
                                            "src": "27288:14:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                              "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                            }
                                          },
                                          "id": 7657,
                                          "indexExpression": {
                                            "id": 7656,
                                            "name": "_tokenIdVoucher",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7558,
                                            "src": "27303:15:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "27288:31:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                            "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                          }
                                        },
                                        "id": 7658,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "cancelFaultPeriodStart",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6267,
                                        "src": "27288:54:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "id": 7659,
                                        "name": "cancelFaultPeriod",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6509,
                                        "src": "27374:17:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "27288:103:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "27244:147:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "434f46504552494f445f45585049524544",
                                    "id": 7662,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "27414:19:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                      "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                    },
                                    "value": "COFPERIOD_EXPIRED"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                      "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                    }
                                  ],
                                  "id": 7652,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "27214:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 7663,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "27214:238:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7664,
                              "nodeType": "ExpressionStatement",
                              "src": "27214:238:6"
                            }
                          ]
                        },
                        "id": 7666,
                        "nodeType": "IfStatement",
                        "src": "26615:931:6",
                        "trueBody": {
                          "id": 7651,
                          "nodeType": "Block",
                          "src": "26653:536:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7639,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 7629,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "26702:5:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 7630,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "src": "26702:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7638,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7636,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "baseExpression": {
                                              "id": 7631,
                                              "name": "vouchersStatus",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6463,
                                              "src": "26746:14:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                              }
                                            },
                                            "id": 7633,
                                            "indexExpression": {
                                              "id": 7632,
                                              "name": "_tokenIdVoucher",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7558,
                                              "src": "26761:15:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "26746:31:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                            }
                                          },
                                          "id": 7634,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "complainPeriodStart",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6265,
                                          "src": "26746:51:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 7635,
                                          "name": "complainPeriod",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6507,
                                          "src": "26829:14:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "26746:97:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "id": 7637,
                                        "name": "cancelFaultPeriod",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6509,
                                        "src": "26875:17:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "26746:146:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "26702:190:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "434f46504552494f445f45585049524544",
                                    "id": 7640,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26915:19:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                      "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                    },
                                    "value": "COFPERIOD_EXPIRED"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                      "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                    }
                                  ],
                                  "id": 7628,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "26672:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 7641,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26672:281:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7642,
                              "nodeType": "ExpressionStatement",
                              "src": "26672:281:6"
                            },
                            {
                              "expression": {
                                "id": 7649,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 7643,
                                      "name": "vouchersStatus",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6463,
                                      "src": "27050:14:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                        "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                      }
                                    },
                                    "id": 7645,
                                    "indexExpression": {
                                      "id": 7644,
                                      "name": "_tokenIdVoucher",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7558,
                                      "src": "27065:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "27050:31:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                      "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                    }
                                  },
                                  "id": 7646,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "complainPeriodStart",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6265,
                                  "src": "27050:51:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "id": 7647,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "27104:5:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 7648,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "27104:37:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "27050:91:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7650,
                              "nodeType": "ExpressionStatement",
                              "src": "27050:91:6"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 7748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7740,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "28972:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7742,
                        "indexExpression": {
                          "id": 7741,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7558,
                          "src": "28987:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "28972:31:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7743,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6259,
                      "src": "28972:38:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 7745,
                          "name": "tStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7582,
                          "src": "29037:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 7746,
                          "name": "IDX_CANCEL_FAULT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6211,
                          "src": "29059:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7744,
                        "name": "setChange",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6379,
                        "src": "29013:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                          "typeString": "function (uint8,uint8) pure returns (uint8)"
                        }
                      },
                      "id": 7747,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29013:73:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "28972:114:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 7749,
                  "nodeType": "ExpressionStatement",
                  "src": "28972:114:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7751,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7558,
                        "src": "29126:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7750,
                      "name": "LogVoucherFaultCancel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6557,
                      "src": "29104:21:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 7752,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29104:38:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7753,
                  "nodeType": "EmitStatement",
                  "src": "29099:43:6"
                }
              ]
            },
            "documentation": {
              "id": 7556,
              "nodeType": "StructuredDocumentation",
              "src": "25410:167:6",
              "text": " @notice Cancel/Fault transaction by the Seller, admitting to a fault or backing out of the deal\n @param _tokenIdVoucher   ID of the voucher"
            },
            "functionSelector": "f5d7aa18",
            "id": 7755,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7564,
                "modifierName": {
                  "id": 7563,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11999,
                  "src": "25696:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "25696:13:6"
              }
            ],
            "name": "cancelOrFault",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7562,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "25678:8:6"
            },
            "parameters": {
              "id": 7561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7558,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 7755,
                  "src": "25606:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7557,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25606:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7560,
                  "mutability": "mutable",
                  "name": "_msgSender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7755,
                  "src": "25631:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7559,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25631:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25605:45:6"
            },
            "returnParameters": {
              "id": 7565,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25715:0:6"
            },
            "scope": 8535,
            "src": "25583:3567:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9405
            ],
            "body": {
              "id": 7809,
              "nodeType": "Block",
              "src": "29662:384:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7775,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 7772,
                              "name": "_tokenIdSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7758,
                              "src": "29697:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7771,
                            "name": "getSupplyHolder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8429,
                            "src": "29681:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 7773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29681:31:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 7774,
                          "name": "_issuer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7760,
                          "src": "29716:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "29681:42:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f434f46",
                        "id": 7776,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "29725:18:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b9f9f283f8fc428e60cb969208985ed8e7933a404e10a1705db091f62778085a",
                          "typeString": "literal_string \"UNAUTHORIZED_COF\""
                        },
                        "value": "UNAUTHORIZED_COF"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b9f9f283f8fc428e60cb969208985ed8e7933a404e10a1705db091f62778085a",
                          "typeString": "literal_string \"UNAUTHORIZED_COF\""
                        }
                      ],
                      "id": 7770,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "29673:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7777,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29673:71:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7778,
                  "nodeType": "ExpressionStatement",
                  "src": "29673:71:6"
                },
                {
                  "assignments": [
                    7780
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7780,
                      "mutability": "mutable",
                      "name": "remQty",
                      "nodeType": "VariableDeclaration",
                      "scope": 7809,
                      "src": "29757:14:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7779,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "29757:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7785,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 7782,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7758,
                        "src": "29793:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 7783,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7760,
                        "src": "29809:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7781,
                      "name": "getRemQtyForSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8280,
                      "src": "29774:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (uint256,address) view returns (uint256)"
                      }
                    },
                    "id": 7784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29774:43:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29757:60:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7789,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 7787,
                          "name": "remQty",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7780,
                          "src": "29838:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 7788,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "29847:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "29838:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f464645525f454d505459",
                        "id": 7790,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "29850:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6876f935fab011de6b034451c60bbcc0620e40b8eebb55c78ca705d7896ccee0",
                          "typeString": "literal_string \"OFFER_EMPTY\""
                        },
                        "value": "OFFER_EMPTY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6876f935fab011de6b034451c60bbcc0620e40b8eebb55c78ca705d7896ccee0",
                          "typeString": "literal_string \"OFFER_EMPTY\""
                        }
                      ],
                      "id": 7786,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "29830:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29830:34:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7792,
                  "nodeType": "ExpressionStatement",
                  "src": "29830:34:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7797,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7760,
                        "src": "29913:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 7798,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7758,
                        "src": "29922:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 7799,
                        "name": "remQty",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7780,
                        "src": "29938:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 7794,
                            "name": "tokensContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6410,
                            "src": "29892:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7793,
                          "name": "IERC1155ERC721",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8975,
                          "src": "29877:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC1155ERC721_$8975_$",
                            "typeString": "type(contract IERC1155ERC721)"
                          }
                        },
                        "id": 7795,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "29877:30:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1155ERC721_$8975",
                          "typeString": "contract IERC1155ERC721"
                        }
                      },
                      "id": 7796,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8955,
                      "src": "29877:35:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256) external"
                      }
                    },
                    "id": 7800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29877:68:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7801,
                  "nodeType": "ExpressionStatement",
                  "src": "29877:68:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7803,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7758,
                        "src": "29988:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 7804,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7760,
                        "src": "30004:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7802,
                      "name": "LogVoucherSetFaultCancel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6599,
                      "src": "29963:24:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 7805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29963:49:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7806,
                  "nodeType": "EmitStatement",
                  "src": "29958:54:6"
                },
                {
                  "expression": {
                    "id": 7807,
                    "name": "remQty",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7780,
                    "src": "30032:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7769,
                  "id": 7808,
                  "nodeType": "Return",
                  "src": "30025:13:6"
                }
              ]
            },
            "documentation": {
              "id": 7756,
              "nodeType": "StructuredDocumentation",
              "src": "29158:309:6",
              "text": " @notice Cancel/Fault transaction by the Seller, cancelling the remaining uncommitted voucher set so that seller prevents buyers from committing to vouchers for items no longer in exchange.\n @param _tokenIdSupply   ID of the voucher set\n @param _issuer   owner of the voucher"
            },
            "functionSelector": "455e42f2",
            "id": 7810,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7764,
                "modifierName": {
                  "id": 7763,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "29592:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "29592:14:6"
              },
              {
                "id": 7766,
                "modifierName": {
                  "id": 7765,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11999,
                  "src": "29616:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "29616:13:6"
              }
            ],
            "name": "cancelOrFaultVoucherSet",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7762,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "29574:8:6"
            },
            "parameters": {
              "id": 7761,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7758,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7810,
                  "src": "29506:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7757,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29506:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7760,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nodeType": "VariableDeclaration",
                  "scope": 7810,
                  "src": "29530:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7759,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "29530:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29505:41:6"
            },
            "returnParameters": {
              "id": 7769,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7768,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7810,
                  "src": "29648:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7767,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29648:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29647:9:6"
            },
            "scope": 8535,
            "src": "29473:573:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9347
            ],
            "body": {
              "id": 7838,
              "nodeType": "Block",
              "src": "30398:277:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7822,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 7820,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7813,
                          "src": "30417:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 7821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "30436:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "30417:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4944",
                        "id": 7823,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "30439:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        },
                        "value": "UNSPECIFIED_ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        }
                      ],
                      "id": 7819,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "30409:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7824,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30409:47:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7825,
                  "nodeType": "ExpressionStatement",
                  "src": "30409:47:6"
                },
                {
                  "expression": {
                    "id": 7831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7826,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "30557:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7828,
                        "indexExpression": {
                          "id": 7827,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7813,
                          "src": "30572:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "30557:31:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7829,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isPaymentReleased",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6261,
                      "src": "30557:49:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 7830,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30609:4:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "30557:56:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7832,
                  "nodeType": "ExpressionStatement",
                  "src": "30557:56:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7834,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7813,
                        "src": "30648:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 7835,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "30665:1:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 7833,
                      "name": "LogFundsReleased",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6605,
                      "src": "30631:16:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint8_$returns$__$",
                        "typeString": "function (uint256,uint8)"
                      }
                    },
                    "id": 7836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30631:36:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7837,
                  "nodeType": "EmitStatement",
                  "src": "30626:41:6"
                }
              ]
            },
            "documentation": {
              "id": 7811,
              "nodeType": "StructuredDocumentation",
              "src": "30139:134:6",
              "text": " @notice Mark voucher token that the payment was released\n @param _tokenIdVoucher   ID of the voucher token"
            },
            "functionSelector": "75549516",
            "id": 7839,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7817,
                "modifierName": {
                  "id": 7816,
                  "name": "onlyFromCashier",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6649,
                  "src": "30377:15:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "30377:15:6"
              }
            ],
            "name": "setPaymentReleased",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7815,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "30359:8:6"
            },
            "parameters": {
              "id": 7814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7813,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 7839,
                  "src": "30307:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7812,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30307:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30306:25:6"
            },
            "returnParameters": {
              "id": 7818,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30398:0:6"
            },
            "scope": 8535,
            "src": "30279:396:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9353
            ],
            "body": {
              "id": 7867,
              "nodeType": "Block",
              "src": "30945:278:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 7849,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7842,
                          "src": "30964:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 7850,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "30983:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "30964:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4944",
                        "id": 7852,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "30986:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        },
                        "value": "UNSPECIFIED_ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        }
                      ],
                      "id": 7848,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "30956:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7853,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30956:47:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7854,
                  "nodeType": "ExpressionStatement",
                  "src": "30956:47:6"
                },
                {
                  "expression": {
                    "id": 7860,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7855,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "31104:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7857,
                        "indexExpression": {
                          "id": 7856,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7842,
                          "src": "31119:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "31104:31:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7858,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isDepositsReleased",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6263,
                      "src": "31104:50:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 7859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31157:4:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "31104:57:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7861,
                  "nodeType": "ExpressionStatement",
                  "src": "31104:57:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7863,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7842,
                        "src": "31196:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "31",
                        "id": 7864,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "31213:1:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 7862,
                      "name": "LogFundsReleased",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6605,
                      "src": "31179:16:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint8_$returns$__$",
                        "typeString": "function (uint256,uint8)"
                      }
                    },
                    "id": 7865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31179:36:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7866,
                  "nodeType": "EmitStatement",
                  "src": "31174:41:6"
                }
              ]
            },
            "documentation": {
              "id": 7840,
              "nodeType": "StructuredDocumentation",
              "src": "30683:136:6",
              "text": " @notice Mark voucher token that the deposits were released\n @param _tokenIdVoucher   ID of the voucher token"
            },
            "functionSelector": "ebba1b29",
            "id": 7868,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7846,
                "modifierName": {
                  "id": 7845,
                  "name": "onlyFromCashier",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6649,
                  "src": "30924:15:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "30924:15:6"
              }
            ],
            "name": "setDepositsReleased",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7844,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "30906:8:6"
            },
            "parameters": {
              "id": 7843,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7842,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 7868,
                  "src": "30854:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7841,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30854:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30853:25:6"
            },
            "returnParameters": {
              "id": 7847,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30945:0:6"
            },
            "scope": 8535,
            "src": "30825:398:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9423
            ],
            "body": {
              "id": 7923,
              "nodeType": "Block",
              "src": "31422:660:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 7876,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7871,
                          "src": "31441:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 7877,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "31460:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "31441:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4944",
                        "id": 7879,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "31463:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        },
                        "value": "UNSPECIFIED_ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        }
                      ],
                      "id": 7875,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "31433:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31433:47:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7881,
                  "nodeType": "ExpressionStatement",
                  "src": "31433:47:6"
                },
                {
                  "assignments": [
                    7883
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7883,
                      "mutability": "mutable",
                      "name": "tPromise",
                      "nodeType": "VariableDeclaration",
                      "scope": 7923,
                      "src": "31583:23:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                        "typeString": "struct VoucherKernel.Promise"
                      },
                      "typeName": {
                        "id": 7882,
                        "name": "Promise",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6429,
                        "src": "31583:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Promise_$6429_storage_ptr",
                          "typeString": "struct VoucherKernel.Promise"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7889,
                  "initialValue": {
                    "baseExpression": {
                      "id": 7884,
                      "name": "promises",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6444,
                      "src": "31622:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                        "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                      }
                    },
                    "id": 7888,
                    "indexExpression": {
                      "arguments": [
                        {
                          "id": 7886,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7871,
                          "src": "31657:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7885,
                        "name": "getPromiseIdFromVoucherId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8260,
                        "src": "31631:25:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (uint256) view returns (bytes32)"
                        }
                      },
                      "id": 7887,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31631:42:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "31622:52:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                      "typeString": "struct VoucherKernel.Promise storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31583:91:6"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7894,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 7890,
                          "name": "tPromise",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7883,
                          "src": "31705:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                            "typeString": "struct VoucherKernel.Promise memory"
                          }
                        },
                        "id": 7891,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "validTo",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6420,
                        "src": "31705:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "expression": {
                          "id": 7892,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "31724:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 7893,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "31724:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "31705:34:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 7896,
                              "name": "vouchersStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6463,
                              "src": "31773:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                              }
                            },
                            "id": 7898,
                            "indexExpression": {
                              "id": 7897,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7871,
                              "src": "31788:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "31773:31:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                            }
                          },
                          "id": 7899,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6259,
                          "src": "31773:38:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7895,
                        "name": "isStateCommitted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6284,
                        "src": "31756:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                          "typeString": "function (uint8) pure returns (bool)"
                        }
                      },
                      "id": 7900,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31756:56:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "31705:107:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7922,
                  "nodeType": "IfStatement",
                  "src": "31687:388:6",
                  "trueBody": {
                    "id": 7921,
                    "nodeType": "Block",
                    "src": "31824:251:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 7913,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 7902,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "31839:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 7904,
                              "indexExpression": {
                                "id": 7903,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7871,
                                "src": "31854:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "31839:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 7905,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "status",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6259,
                            "src": "31839:38:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 7907,
                                    "name": "vouchersStatus",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6463,
                                    "src": "31908:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                      "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                    }
                                  },
                                  "id": 7909,
                                  "indexExpression": {
                                    "id": 7908,
                                    "name": "_tokenIdVoucher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7871,
                                    "src": "31923:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "31908:31:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                    "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                  }
                                },
                                "id": 7910,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "status",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6259,
                                "src": "31908:38:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "id": 7911,
                                "name": "IDX_EXPIRE",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6205,
                                "src": "31965:10:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 7906,
                              "name": "setChange",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6379,
                              "src": "31880:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                                "typeString": "function (uint8,uint8) pure returns (uint8)"
                              }
                            },
                            "id": 7912,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31880:110:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "31839:151:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 7914,
                        "nodeType": "ExpressionStatement",
                        "src": "31839:151:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 7916,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7871,
                              "src": "32035:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 7917,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "32052:3:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7918,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "32052:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 7915,
                            "name": "LogExpirationTriggered",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6563,
                            "src": "32012:22:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (uint256,address)"
                            }
                          },
                          "id": 7919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32012:51:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7920,
                        "nodeType": "EmitStatement",
                        "src": "32007:56:6"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 7869,
              "nodeType": "StructuredDocumentation",
              "src": "31231:115:6",
              "text": " @notice Mark voucher token as expired\n @param _tokenIdVoucher   ID of the voucher token"
            },
            "functionSelector": "d40ffcf8",
            "id": 7924,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "triggerExpiration",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7873,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "31413:8:6"
            },
            "parameters": {
              "id": 7872,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7871,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 7924,
                  "src": "31379:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7870,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31379:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "31378:25:6"
            },
            "returnParameters": {
              "id": 7874,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31422:0:6"
            },
            "scope": 8535,
            "src": "31352:730:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9429
            ],
            "body": {
              "id": 8077,
              "nodeType": "Block",
              "src": "32295:2180:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7934,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 7932,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7927,
                          "src": "32314:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 7933,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "32333:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "32314:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4944",
                        "id": 7935,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32336:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        },
                        "value": "UNSPECIFIED_ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        }
                      ],
                      "id": 7931,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "32306:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7936,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32306:47:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7937,
                  "nodeType": "ExpressionStatement",
                  "src": "32306:47:6"
                },
                {
                  "assignments": [
                    7939
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7939,
                      "mutability": "mutable",
                      "name": "tStatus",
                      "nodeType": "VariableDeclaration",
                      "scope": 8077,
                      "src": "32456:13:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 7938,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "32456:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7944,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 7940,
                        "name": "vouchersStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6463,
                        "src": "32472:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                          "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                        }
                      },
                      "id": 7942,
                      "indexExpression": {
                        "id": 7941,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7927,
                        "src": "32487:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "32472:31:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                        "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                      }
                    },
                    "id": 7943,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "status",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6259,
                    "src": "32472:38:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32456:54:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7950,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "32531:29:6",
                        "subExpression": {
                          "arguments": [
                            {
                              "id": 7947,
                              "name": "tStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7939,
                              "src": "32541:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 7948,
                              "name": "IDX_FINAL",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6214,
                              "src": "32550:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 7946,
                            "name": "isStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6361,
                            "src": "32532:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8,uint8) pure returns (bool)"
                            }
                          },
                          "id": 7949,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32532:28:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f46494e414c495a4544",
                        "id": 7951,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32562:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a84b963af821bd2b41d802daa2c7840123c5cf834cde12aa10bdce75ff0df2d9",
                          "typeString": "literal_string \"ALREADY_FINALIZED\""
                        },
                        "value": "ALREADY_FINALIZED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a84b963af821bd2b41d802daa2c7840123c5cf834cde12aa10bdce75ff0df2d9",
                          "typeString": "literal_string \"ALREADY_FINALIZED\""
                        }
                      ],
                      "id": 7945,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "32523:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7952,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32523:59:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7953,
                  "nodeType": "ExpressionStatement",
                  "src": "32523:59:6"
                },
                {
                  "assignments": [
                    7955
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7955,
                      "mutability": "mutable",
                      "name": "mark",
                      "nodeType": "VariableDeclaration",
                      "scope": 8077,
                      "src": "32677:9:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 7954,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "32677:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7956,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32677:9:6"
                },
                {
                  "assignments": [
                    7958
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7958,
                      "mutability": "mutable",
                      "name": "tPromise",
                      "nodeType": "VariableDeclaration",
                      "scope": 8077,
                      "src": "32697:23:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                        "typeString": "struct VoucherKernel.Promise"
                      },
                      "typeName": {
                        "id": 7957,
                        "name": "Promise",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6429,
                        "src": "32697:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Promise_$6429_storage_ptr",
                          "typeString": "struct VoucherKernel.Promise"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7964,
                  "initialValue": {
                    "baseExpression": {
                      "id": 7959,
                      "name": "promises",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6444,
                      "src": "32736:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                        "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                      }
                    },
                    "id": 7963,
                    "indexExpression": {
                      "arguments": [
                        {
                          "id": 7961,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7927,
                          "src": "32771:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7960,
                        "name": "getPromiseIdFromVoucherId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8260,
                        "src": "32745:25:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (uint256) view returns (bytes32)"
                        }
                      },
                      "id": 7962,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "32745:42:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "32736:52:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                      "typeString": "struct VoucherKernel.Promise storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32697:91:6"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 7966,
                        "name": "tStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7939,
                        "src": "32814:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 7967,
                        "name": "IDX_COMPLAIN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6208,
                        "src": "32823:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 7965,
                      "name": "isStatus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6361,
                      "src": "32805:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                        "typeString": "function (uint8,uint8) pure returns (bool)"
                      }
                    },
                    "id": 7968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32805:31:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 8008,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 7996,
                            "name": "tStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7939,
                            "src": "33315:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          {
                            "id": 7997,
                            "name": "IDX_CANCEL_FAULT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6211,
                            "src": "33324:16:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 7995,
                          "name": "isStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6361,
                          "src": "33306:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                            "typeString": "function (uint8,uint8) pure returns (bool)"
                          }
                        },
                        "id": 7998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "33306:35:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8007,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 7999,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "33358:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8000,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "33358:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 8001,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "33390:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 8003,
                              "indexExpression": {
                                "id": 8002,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7927,
                                "src": "33405:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "33390:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 8004,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "complainPeriodStart",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6265,
                            "src": "33390:51:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 8005,
                            "name": "complainPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6507,
                            "src": "33444:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "33390:68:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "33358:100:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "33306:152:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8020,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 8015,
                              "name": "tStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7939,
                              "src": "33612:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 8014,
                            "name": "isStateRedemptionSigned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6303,
                            "src": "33588:23:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8) pure returns (bool)"
                            }
                          },
                          "id": 8016,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33588:32:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 8018,
                              "name": "tStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7939,
                              "src": "33640:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 8017,
                            "name": "isStateRefunded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6322,
                            "src": "33624:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8) pure returns (bool)"
                            }
                          },
                          "id": 8019,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33624:24:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "33588:60:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "arguments": [
                            {
                              "id": 8038,
                              "name": "tStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7939,
                              "src": "34015:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 8037,
                            "name": "isStateExpired",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6341,
                            "src": "34000:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8) pure returns (bool)"
                            }
                          },
                          "id": 8039,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "34000:23:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8054,
                        "nodeType": "IfStatement",
                        "src": "33996:237:6",
                        "trueBody": {
                          "id": 8053,
                          "nodeType": "Block",
                          "src": "34025:208:6",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8046,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 8040,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "34122:5:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 8041,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "34122:15:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8045,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 8042,
                                      "name": "tPromise",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7958,
                                      "src": "34141:8:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                                        "typeString": "struct VoucherKernel.Promise memory"
                                      }
                                    },
                                    "id": 8043,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "validTo",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6420,
                                    "src": "34141:16:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "id": 8044,
                                    "name": "complainPeriod",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6507,
                                    "src": "34160:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "34141:33:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "34122:52:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8052,
                              "nodeType": "IfStatement",
                              "src": "34118:104:6",
                              "trueBody": {
                                "id": 8051,
                                "nodeType": "Block",
                                "src": "34176:46:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 8049,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 8047,
                                        "name": "mark",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7955,
                                        "src": "34195:4:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "hexValue": "74727565",
                                        "id": 8048,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "34202:4:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "value": "true"
                                      },
                                      "src": "34195:11:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 8050,
                                    "nodeType": "ExpressionStatement",
                                    "src": "34195:11:6"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      },
                      "id": 8055,
                      "nodeType": "IfStatement",
                      "src": "33570:663:6",
                      "trueBody": {
                        "id": 8036,
                        "nodeType": "Block",
                        "src": "33660:330:6",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8029,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 8021,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "33792:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 8022,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "33792:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8028,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 8023,
                                      "name": "vouchersStatus",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6463,
                                      "src": "33828:14:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                        "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                      }
                                    },
                                    "id": 8025,
                                    "indexExpression": {
                                      "id": 8024,
                                      "name": "_tokenIdVoucher",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7927,
                                      "src": "33843:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "33828:31:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                      "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                    }
                                  },
                                  "id": 8026,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "complainPeriodStart",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6265,
                                  "src": "33828:51:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 8027,
                                  "name": "complainPeriod",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6507,
                                  "src": "33903:14:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "33828:89:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "33792:125:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 8035,
                            "nodeType": "IfStatement",
                            "src": "33770:209:6",
                            "trueBody": {
                              "id": 8034,
                              "nodeType": "Block",
                              "src": "33933:46:6",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 8032,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 8030,
                                      "name": "mark",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7955,
                                      "src": "33952:4:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "hexValue": "74727565",
                                      "id": 8031,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "33959:4:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "true"
                                    },
                                    "src": "33952:11:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 8033,
                                  "nodeType": "ExpressionStatement",
                                  "src": "33952:11:6"
                                }
                              ]
                            }
                          }
                        ]
                      }
                    },
                    "id": 8056,
                    "nodeType": "IfStatement",
                    "src": "33288:945:6",
                    "trueBody": {
                      "id": 8013,
                      "nodeType": "Block",
                      "src": "33470:94:6",
                      "statements": [
                        {
                          "expression": {
                            "id": 8011,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 8009,
                              "name": "mark",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7955,
                              "src": "33541:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "hexValue": "74727565",
                              "id": 8010,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "33548:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            "src": "33541:11:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 8012,
                          "nodeType": "ExpressionStatement",
                          "src": "33541:11:6"
                        }
                      ]
                    }
                  },
                  "id": 8057,
                  "nodeType": "IfStatement",
                  "src": "32801:1432:6",
                  "trueBody": {
                    "id": 7994,
                    "nodeType": "Block",
                    "src": "32838:444:6",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 7970,
                              "name": "tStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7939,
                              "src": "32866:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 7971,
                              "name": "IDX_CANCEL_FAULT",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6211,
                              "src": "32875:16:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 7969,
                            "name": "isStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6361,
                            "src": "32857:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8,uint8) pure returns (bool)"
                            }
                          },
                          "id": 7972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32857:35:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7986,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 7978,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "33018:5:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 7979,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "33018:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7985,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 7980,
                                    "name": "vouchersStatus",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6463,
                                    "src": "33054:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                      "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                    }
                                  },
                                  "id": 7982,
                                  "indexExpression": {
                                    "id": 7981,
                                    "name": "_tokenIdVoucher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7927,
                                    "src": "33069:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "33054:31:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                    "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                  }
                                },
                                "id": 7983,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "cancelFaultPeriodStart",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6267,
                                "src": "33054:54:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "id": 7984,
                                "name": "cancelFaultPeriod",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6509,
                                "src": "33132:17:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "33054:95:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "33018:131:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 7992,
                          "nodeType": "IfStatement",
                          "src": "32996:275:6",
                          "trueBody": {
                            "id": 7991,
                            "nodeType": "Block",
                            "src": "33165:106:6",
                            "statements": [
                              {
                                "expression": {
                                  "id": 7989,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 7987,
                                    "name": "mark",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7955,
                                    "src": "33244:4:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "hexValue": "74727565",
                                    "id": 7988,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "33251:4:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  },
                                  "src": "33244:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "id": 7990,
                                "nodeType": "ExpressionStatement",
                                "src": "33244:11:6"
                              }
                            ]
                          }
                        },
                        "id": 7993,
                        "nodeType": "IfStatement",
                        "src": "32853:418:6",
                        "trueBody": {
                          "id": 7977,
                          "nodeType": "Block",
                          "src": "32894:96:6",
                          "statements": [
                            {
                              "expression": {
                                "id": 7975,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 7973,
                                  "name": "mark",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7955,
                                  "src": "32963:4:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "74727565",
                                  "id": 7974,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "32970:4:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "32963:11:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 7976,
                              "nodeType": "ExpressionStatement",
                              "src": "32963:11:6"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "id": 8058,
                    "name": "mark",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7955,
                    "src": "34249:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8076,
                  "nodeType": "IfStatement",
                  "src": "34245:223:6",
                  "trueBody": {
                    "id": 8075,
                    "nodeType": "Block",
                    "src": "34255:213:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 8067,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 8059,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "34270:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 8061,
                              "indexExpression": {
                                "id": 8060,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7927,
                                "src": "34285:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "34270:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 8062,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "status",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6259,
                            "src": "34270:38:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8064,
                                "name": "tStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7939,
                                "src": "34339:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "id": 8065,
                                "name": "IDX_FINAL",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6214,
                                "src": "34365:9:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 8063,
                              "name": "setChange",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6379,
                              "src": "34311:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                                "typeString": "function (uint8,uint8) pure returns (uint8)"
                              }
                            },
                            "id": 8066,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "34311:78:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "34270:119:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 8068,
                        "nodeType": "ExpressionStatement",
                        "src": "34270:119:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 8070,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7927,
                              "src": "34428:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 8071,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "34445:3:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8072,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "34445:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 8069,
                            "name": "LogFinalizeVoucher",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6569,
                            "src": "34409:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (uint256,address)"
                            }
                          },
                          "id": 8073,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "34409:47:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8074,
                        "nodeType": "EmitStatement",
                        "src": "34404:52:6"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 7925,
              "nodeType": "StructuredDocumentation",
              "src": "32090:124:6",
              "text": " @notice Mark voucher token to the final status\n @param _tokenIdVoucher   ID of the voucher token"
            },
            "functionSelector": "65c303bc",
            "id": 8078,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "triggerFinalizeVoucher",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7929,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "32286:8:6"
            },
            "parameters": {
              "id": 7928,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7927,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 8078,
                  "src": "32252:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7926,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32252:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "32251:25:6"
            },
            "returnParameters": {
              "id": 7930,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32295:0:6"
            },
            "scope": 8535,
            "src": "32220:2255:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9437
            ],
            "body": {
              "id": 8102,
              "nodeType": "Block",
              "src": "34948:120:6",
              "statements": [
                {
                  "assignments": [
                    8090
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8090,
                      "mutability": "mutable",
                      "name": "promiseKey",
                      "nodeType": "VariableDeclaration",
                      "scope": 8102,
                      "src": "34959:18:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8089,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "34959:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8094,
                  "initialValue": {
                    "baseExpression": {
                      "id": 8091,
                      "name": "ordersPromise",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6459,
                      "src": "34980:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                        "typeString": "mapping(uint256 => bytes32)"
                      }
                    },
                    "id": 8093,
                    "indexExpression": {
                      "id": 8092,
                      "name": "_tokenIdSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8081,
                      "src": "34994:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "34980:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "34959:50:6"
                },
                {
                  "expression": {
                    "id": 8100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8095,
                          "name": "promises",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6444,
                          "src": "35020:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                            "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                          }
                        },
                        "id": 8097,
                        "indexExpression": {
                          "id": 8096,
                          "name": "promiseKey",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8090,
                          "src": "35029:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "35020:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Promise_$6429_storage",
                          "typeString": "struct VoucherKernel.Promise storage ref"
                        }
                      },
                      "id": 8098,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "seller",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6416,
                      "src": "35020:27:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8099,
                      "name": "_newSeller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8083,
                      "src": "35050:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "35020:40:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8101,
                  "nodeType": "ExpressionStatement",
                  "src": "35020:40:6"
                }
              ]
            },
            "documentation": {
              "id": 8079,
              "nodeType": "StructuredDocumentation",
              "src": "34585:220:6",
              "text": " @notice Set the address of the new holder of a _tokenIdSupply on transfer\n @param _tokenIdSupply   _tokenIdSupply which will be transferred\n @param _newSeller   new holder of the supply"
            },
            "functionSelector": "88c25607",
            "id": 8103,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8087,
                "modifierName": {
                  "id": 8086,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "34933:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "34933:14:6"
              }
            ],
            "name": "setSupplyHolderOnTransfer",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8085,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "34924:8:6"
            },
            "parameters": {
              "id": 8084,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8081,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8103,
                  "src": "34856:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8080,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34856:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8083,
                  "mutability": "mutable",
                  "name": "_newSeller",
                  "nodeType": "VariableDeclaration",
                  "scope": 8103,
                  "src": "34889:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8082,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "34889:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "34845:69:6"
            },
            "returnParameters": {
              "id": 8088,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "34948:0:6"
            },
            "scope": 8535,
            "src": "34811:257:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8131,
              "nodeType": "Block",
              "src": "35325:295:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8117,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 8112,
                          "name": "_bosonRouterAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8106,
                          "src": "35344:19:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 8115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "35375:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 8114,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "35367:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 8113,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "35367:7:6",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "35367:10:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "35344:33:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 8118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "35379:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 8111,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "35336:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35336:65:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8120,
                  "nodeType": "ExpressionStatement",
                  "src": "35336:65:6"
                },
                {
                  "expression": {
                    "id": 8123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8121,
                      "name": "bosonRouterAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6438,
                      "src": "35504:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8122,
                      "name": "_bosonRouterAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8106,
                      "src": "35525:19:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "35504:40:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8124,
                  "nodeType": "ExpressionStatement",
                  "src": "35504:40:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8126,
                        "name": "_bosonRouterAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8106,
                        "src": "35580:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 8127,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "35601:3:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8128,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "35601:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 8125,
                      "name": "LogBosonRouterSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6575,
                      "src": "35562:17:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 8129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35562:50:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8130,
                  "nodeType": "EmitStatement",
                  "src": "35557:55:6"
                }
              ]
            },
            "documentation": {
              "id": 8104,
              "nodeType": "StructuredDocumentation",
              "src": "35076:141:6",
              "text": " @notice Set the address of the Boson Router contract\n @param _bosonRouterAddress   The address of the BR contract"
            },
            "functionSelector": "bd17de40",
            "id": 8132,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8109,
                "modifierName": {
                  "id": 8108,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10443,
                  "src": "35310:9:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "35310:9:6"
              }
            ],
            "name": "setBosonRouterAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8107,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8106,
                  "mutability": "mutable",
                  "name": "_bosonRouterAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 8132,
                  "src": "35254:27:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8105,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "35254:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "35253:29:6"
            },
            "returnParameters": {
              "id": 8110,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "35325:0:6"
            },
            "scope": 8535,
            "src": "35223:397:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9449
            ],
            "body": {
              "id": 8161,
              "nodeType": "Block",
              "src": "35878:275:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8147,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 8142,
                          "name": "_cashierAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8135,
                          "src": "35897:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 8145,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "35924:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 8144,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "35916:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 8143,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "35916:7:6",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "35916:10:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "35897:29:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 8148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "35928:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 8141,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "35889:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35889:61:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8150,
                  "nodeType": "ExpressionStatement",
                  "src": "35889:61:6"
                },
                {
                  "expression": {
                    "id": 8153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8151,
                      "name": "cashierAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6440,
                      "src": "36053:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8152,
                      "name": "_cashierAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8135,
                      "src": "36070:15:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "36053:32:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8154,
                  "nodeType": "ExpressionStatement",
                  "src": "36053:32:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8156,
                        "name": "_cashierAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8135,
                        "src": "36117:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 8157,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "36134:3:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "36134:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 8155,
                      "name": "LogCashierSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6581,
                      "src": "36103:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 8159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36103:42:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8160,
                  "nodeType": "EmitStatement",
                  "src": "36098:47:6"
                }
              ]
            },
            "documentation": {
              "id": 8133,
              "nodeType": "StructuredDocumentation",
              "src": "35628:132:6",
              "text": " @notice Set the address of the Cashier contract\n @param _cashierAddress   The address of the BR contract"
            },
            "functionSelector": "c099a7c4",
            "id": 8162,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8139,
                "modifierName": {
                  "id": 8138,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10443,
                  "src": "35863:9:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "35863:9:6"
              }
            ],
            "name": "setCashierAddress",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8137,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "35845:8:6"
            },
            "parameters": {
              "id": 8136,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8135,
                  "mutability": "mutable",
                  "name": "_cashierAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 8162,
                  "src": "35793:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8134,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "35793:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "35792:25:6"
            },
            "returnParameters": {
              "id": 8140,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "35878:0:6"
            },
            "scope": 8535,
            "src": "35766:387:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9455
            ],
            "body": {
              "id": 8181,
              "nodeType": "Block",
              "src": "36527:122:6",
              "statements": [
                {
                  "expression": {
                    "id": 8173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8171,
                      "name": "complainPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6507,
                      "src": "36538:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8172,
                      "name": "_complainPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8165,
                      "src": "36555:15:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "36538:32:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8174,
                  "nodeType": "ExpressionStatement",
                  "src": "36538:32:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8176,
                        "name": "_complainPeriod",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8165,
                        "src": "36613:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 8177,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "36630:3:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "36630:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 8175,
                      "name": "LogComplainPeriodChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6587,
                      "src": "36588:24:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 8179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36588:53:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8180,
                  "nodeType": "EmitStatement",
                  "src": "36583:58:6"
                }
              ]
            },
            "documentation": {
              "id": 8163,
              "nodeType": "StructuredDocumentation",
              "src": "36161:248:6",
              "text": " @notice Set the general complain period, should be used sparingly as it has significant consequences. Here done simply for demo purposes.\n @param _complainPeriod   the new value for complain period (in number of seconds)"
            },
            "functionSelector": "8990834b",
            "id": 8182,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8169,
                "modifierName": {
                  "id": 8168,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10443,
                  "src": "36512:9:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "36512:9:6"
              }
            ],
            "name": "setComplainPeriod",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8167,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "36494:8:6"
            },
            "parameters": {
              "id": 8166,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8165,
                  "mutability": "mutable",
                  "name": "_complainPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 8182,
                  "src": "36442:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8164,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36442:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "36441:25:6"
            },
            "returnParameters": {
              "id": 8170,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "36527:0:6"
            },
            "scope": 8535,
            "src": "36415:234:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9443
            ],
            "body": {
              "id": 8201,
              "nodeType": "Block",
              "src": "37042:134:6",
              "statements": [
                {
                  "expression": {
                    "id": 8193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8191,
                      "name": "cancelFaultPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6509,
                      "src": "37053:17:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8192,
                      "name": "_cancelFaultPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8185,
                      "src": "37073:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "37053:38:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8194,
                  "nodeType": "ExpressionStatement",
                  "src": "37053:38:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8196,
                        "name": "_cancelFaultPeriod",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8185,
                        "src": "37137:18:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 8197,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "37157:3:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8198,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "37157:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 8195,
                      "name": "LogCancelFaultPeriodChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6593,
                      "src": "37109:27:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 8199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "37109:59:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8200,
                  "nodeType": "EmitStatement",
                  "src": "37104:64:6"
                }
              ]
            },
            "documentation": {
              "id": 8183,
              "nodeType": "StructuredDocumentation",
              "src": "36657:261:6",
              "text": " @notice Set the general cancelOrFault period, should be used sparingly as it has significant consequences. Here done simply for demo purposes.\n @param _cancelFaultPeriod   the new value for cancelOrFault period (in number of seconds)"
            },
            "functionSelector": "ede80897",
            "id": 8202,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8189,
                "modifierName": {
                  "id": 8188,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10443,
                  "src": "37027:9:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "37027:9:6"
              }
            ],
            "name": "setCancelFaultPeriod",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8187,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "37009:8:6"
            },
            "parameters": {
              "id": 8186,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8185,
                  "mutability": "mutable",
                  "name": "_cancelFaultPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 8202,
                  "src": "36954:26:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8184,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36954:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "36953:28:6"
            },
            "returnParameters": {
              "id": 8190,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "37042:0:6"
            },
            "scope": 8535,
            "src": "36924:252:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9463
            ],
            "body": {
              "id": 8215,
              "nodeType": "Block",
              "src": "37536:43:6",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 8211,
                      "name": "promiseKeys",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6455,
                      "src": "37554:11:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                        "typeString": "bytes32[] storage ref"
                      }
                    },
                    "id": 8213,
                    "indexExpression": {
                      "id": 8212,
                      "name": "_idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8205,
                      "src": "37566:4:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "37554:17:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 8210,
                  "id": 8214,
                  "nodeType": "Return",
                  "src": "37547:24:6"
                }
              ]
            },
            "documentation": {
              "id": 8203,
              "nodeType": "StructuredDocumentation",
              "src": "37260:153:6",
              "text": " @notice Get the promise ID at specific index\n @param _idx  Index in the array of promise keys\n @return      Promise ID"
            },
            "functionSelector": "81dc8119",
            "id": 8216,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPromiseKey",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8207,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "37495:8:6"
            },
            "parameters": {
              "id": 8206,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8205,
                  "mutability": "mutable",
                  "name": "_idx",
                  "nodeType": "VariableDeclaration",
                  "scope": 8216,
                  "src": "37442:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8204,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "37442:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37441:14:6"
            },
            "returnParameters": {
              "id": 8210,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8209,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8216,
                  "src": "37522:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8208,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "37522:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37521:9:6"
            },
            "scope": 8535,
            "src": "37419:160:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9505
            ],
            "body": {
              "id": 8229,
              "nodeType": "Block",
              "src": "37916:53:6",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8225,
                      "name": "_tokenIdVoucher",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8219,
                      "src": "37934:15:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&",
                    "rightExpression": {
                      "id": 8226,
                      "name": "MASK_TYPE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6491,
                      "src": "37952:9:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "37934:27:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8224,
                  "id": 8228,
                  "nodeType": "Return",
                  "src": "37927:34:6"
                }
              ]
            },
            "documentation": {
              "id": 8217,
              "nodeType": "StructuredDocumentation",
              "src": "37587:186:6",
              "text": " @notice Get the supply token ID from a voucher token\n @param _tokenIdVoucher   ID of the voucher token\n @return                  ID of the supply token"
            },
            "functionSelector": "1af2a6a8",
            "id": 8230,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getIdSupplyFromVoucher",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8221,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "37875:8:6"
            },
            "parameters": {
              "id": 8220,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8219,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 8230,
                  "src": "37811:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8218,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "37811:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37810:25:6"
            },
            "returnParameters": {
              "id": 8224,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8223,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8230,
                  "src": "37902:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8222,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "37902:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37901:9:6"
            },
            "scope": 8535,
            "src": "37779:190:6",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9513
            ],
            "body": {
              "id": 8259,
              "nodeType": "Block",
              "src": "38299:298:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8242,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 8240,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8233,
                          "src": "38318:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 8241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "38337:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "38318:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4944",
                        "id": 8243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "38340:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        },
                        "value": "UNSPECIFIED_ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        }
                      ],
                      "id": 8239,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "38310:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "38310:47:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8245,
                  "nodeType": "ExpressionStatement",
                  "src": "38310:47:6"
                },
                {
                  "assignments": [
                    8247
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8247,
                      "mutability": "mutable",
                      "name": "tokenIdSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 8259,
                      "src": "38460:21:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8246,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "38460:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8251,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8249,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8233,
                        "src": "38507:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8248,
                      "name": "getIdSupplyFromVoucher",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8230,
                      "src": "38484:22:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "38484:39:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "38460:63:6"
                },
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 8252,
                        "name": "promises",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6444,
                        "src": "38541:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                          "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                        }
                      },
                      "id": 8256,
                      "indexExpression": {
                        "baseExpression": {
                          "id": 8253,
                          "name": "ordersPromise",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6459,
                          "src": "38550:13:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                            "typeString": "mapping(uint256 => bytes32)"
                          }
                        },
                        "id": 8255,
                        "indexExpression": {
                          "id": 8254,
                          "name": "tokenIdSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8247,
                          "src": "38564:13:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "38550:28:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "38541:38:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_storage",
                        "typeString": "struct VoucherKernel.Promise storage ref"
                      }
                    },
                    "id": 8257,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "promiseId",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6412,
                    "src": "38541:48:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 8238,
                  "id": 8258,
                  "nodeType": "Return",
                  "src": "38534:55:6"
                }
              ]
            },
            "documentation": {
              "id": 8231,
              "nodeType": "StructuredDocumentation",
              "src": "37977:176:6",
              "text": " @notice Get the promise ID from a voucher token\n @param _tokenIdVoucher   ID of the voucher token\n @return                  ID of the promise"
            },
            "functionSelector": "bc0d753d",
            "id": 8260,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPromiseIdFromVoucherId",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8235,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "38258:8:6"
            },
            "parameters": {
              "id": 8234,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8233,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 8260,
                  "src": "38194:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8232,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "38194:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "38193:25:6"
            },
            "returnParameters": {
              "id": 8238,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8237,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8260,
                  "src": "38285:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8236,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "38285:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "38284:9:6"
            },
            "scope": 8535,
            "src": "38159:438:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9535
            ],
            "body": {
              "id": 8279,
              "nodeType": "Block",
              "src": "39027:84:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8275,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8265,
                        "src": "39080:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8276,
                        "name": "_tokenSupplyId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8263,
                        "src": "39088:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 8272,
                            "name": "tokensContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6410,
                            "src": "39054:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8271,
                          "name": "IERC1155",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8931,
                          "src": "39045:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC1155_$8931_$",
                            "typeString": "type(contract IERC1155)"
                          }
                        },
                        "id": 8273,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "39045:24:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1155_$8931",
                          "typeString": "contract IERC1155"
                        }
                      },
                      "id": 8274,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8899,
                      "src": "39045:34:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view external returns (uint256)"
                      }
                    },
                    "id": 8277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39045:58:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8270,
                  "id": 8278,
                  "nodeType": "Return",
                  "src": "39038:65:6"
                }
              ]
            },
            "documentation": {
              "id": 8261,
              "nodeType": "StructuredDocumentation",
              "src": "38605:268:6",
              "text": " @notice Get the remaining quantity left in supply of tokens (e.g ERC-721 left in ERC-1155) of an account\n @param _tokenSupplyId  Token supply ID\n @param _owner    holder of the Token Supply\n @return          remaining quantity"
            },
            "functionSelector": "e31a0079",
            "id": 8280,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRemQtyForSupply",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8267,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "38986:8:6"
            },
            "parameters": {
              "id": 8266,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8263,
                  "mutability": "mutable",
                  "name": "_tokenSupplyId",
                  "nodeType": "VariableDeclaration",
                  "scope": 8280,
                  "src": "38907:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8262,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "38907:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8265,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 8280,
                  "src": "38931:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8264,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "38931:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "38906:40:6"
            },
            "returnParameters": {
              "id": 8270,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8269,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8280,
                  "src": "39013:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8268,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39013:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "39012:9:6"
            },
            "scope": 8535,
            "src": "38879:232:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9525
            ],
            "body": {
              "id": 8313,
              "nodeType": "Block",
              "src": "39547:229:6",
              "statements": [
                {
                  "assignments": [
                    8294
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8294,
                      "mutability": "mutable",
                      "name": "promiseKey",
                      "nodeType": "VariableDeclaration",
                      "scope": 8313,
                      "src": "39558:18:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8293,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "39558:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8298,
                  "initialValue": {
                    "baseExpression": {
                      "id": 8295,
                      "name": "ordersPromise",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6459,
                      "src": "39579:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                        "typeString": "mapping(uint256 => bytes32)"
                      }
                    },
                    "id": 8297,
                    "indexExpression": {
                      "id": 8296,
                      "name": "_tokenIdSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8283,
                      "src": "39593:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "39579:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "39558:50:6"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8299,
                            "name": "promises",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6444,
                            "src": "39641:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                              "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                            }
                          },
                          "id": 8301,
                          "indexExpression": {
                            "id": 8300,
                            "name": "promiseKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8294,
                            "src": "39650:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "39641:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Promise_$6429_storage",
                            "typeString": "struct VoucherKernel.Promise storage ref"
                          }
                        },
                        "id": 8302,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "price",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6422,
                        "src": "39641:26:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8303,
                            "name": "promises",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6444,
                            "src": "39682:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                              "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                            }
                          },
                          "id": 8305,
                          "indexExpression": {
                            "id": 8304,
                            "name": "promiseKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8294,
                            "src": "39691:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "39682:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Promise_$6429_storage",
                            "typeString": "struct VoucherKernel.Promise storage ref"
                          }
                        },
                        "id": 8306,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "depositSe",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6424,
                        "src": "39682:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8307,
                            "name": "promises",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6444,
                            "src": "39727:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                              "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                            }
                          },
                          "id": 8309,
                          "indexExpression": {
                            "id": 8308,
                            "name": "promiseKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8294,
                            "src": "39736:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "39727:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Promise_$6429_storage",
                            "typeString": "struct VoucherKernel.Promise storage ref"
                          }
                        },
                        "id": 8310,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "depositBu",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6426,
                        "src": "39727:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 8311,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "39626:142:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 8292,
                  "id": 8312,
                  "nodeType": "Return",
                  "src": "39619:149:6"
                }
              ]
            },
            "documentation": {
              "id": 8281,
              "nodeType": "StructuredDocumentation",
              "src": "39119:227:6",
              "text": " @notice Get all necessary funds for a supply token\n @param _tokenIdSupply   ID of the supply token\n @return                  returns a tuple (Payment amount, Seller's deposit, Buyer's deposit)"
            },
            "functionSelector": "d887b4e7",
            "id": 8314,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getOrderCosts",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8285,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "39438:8:6"
            },
            "parameters": {
              "id": 8284,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8283,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8314,
                  "src": "39375:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8282,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39375:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "39374:24:6"
            },
            "returnParameters": {
              "id": 8292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8287,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8314,
                  "src": "39479:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8286,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39479:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8289,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8314,
                  "src": "39501:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39501:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8291,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8314,
                  "src": "39523:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39523:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "39464:77:6"
            },
            "scope": 8535,
            "src": "39352:424:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9489
            ],
            "body": {
              "id": 8341,
              "nodeType": "Block",
              "src": "40158:147:6",
              "statements": [
                {
                  "assignments": [
                    8326
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8326,
                      "mutability": "mutable",
                      "name": "promiseKey",
                      "nodeType": "VariableDeclaration",
                      "scope": 8341,
                      "src": "40169:18:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8325,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "40169:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8330,
                  "initialValue": {
                    "baseExpression": {
                      "id": 8327,
                      "name": "ordersPromise",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6459,
                      "src": "40190:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                        "typeString": "mapping(uint256 => bytes32)"
                      }
                    },
                    "id": 8329,
                    "indexExpression": {
                      "id": 8328,
                      "name": "_tokenIdSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8317,
                      "src": "40204:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "40190:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "40169:50:6"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8331,
                            "name": "promises",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6444,
                            "src": "40238:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                              "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                            }
                          },
                          "id": 8333,
                          "indexExpression": {
                            "id": 8332,
                            "name": "promiseKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8326,
                            "src": "40247:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "40238:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Promise_$6429_storage",
                            "typeString": "struct VoucherKernel.Promise storage ref"
                          }
                        },
                        "id": 8334,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "price",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6422,
                        "src": "40238:26:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8335,
                            "name": "promises",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6444,
                            "src": "40266:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                              "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                            }
                          },
                          "id": 8337,
                          "indexExpression": {
                            "id": 8336,
                            "name": "promiseKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8326,
                            "src": "40275:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "40266:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Promise_$6429_storage",
                            "typeString": "struct VoucherKernel.Promise storage ref"
                          }
                        },
                        "id": 8338,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "depositBu",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6426,
                        "src": "40266:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 8339,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "40237:60:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 8324,
                  "id": 8340,
                  "nodeType": "Return",
                  "src": "40230:67:6"
                }
              ]
            },
            "documentation": {
              "id": 8315,
              "nodeType": "StructuredDocumentation",
              "src": "39784:227:6",
              "text": " @notice Get Buyer costs required to make an order for a supply token\n @param _tokenIdSupply   ID of the supply token\n @return                  returns a tuple (Payment amount, Buyer's deposit)"
            },
            "functionSelector": "fad4ee94",
            "id": 8342,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getBuyerOrderCosts",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8319,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "40108:8:6"
            },
            "parameters": {
              "id": 8318,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8317,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "40045:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8316,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40045:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "40044:24:6"
            },
            "returnParameters": {
              "id": 8324,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8321,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "40135:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8320,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40135:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8323,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "40144:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8322,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40144:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "40134:18:6"
            },
            "scope": 8535,
            "src": "40017:288:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9497
            ],
            "body": {
              "id": 8362,
              "nodeType": "Block",
              "src": "40608:117:6",
              "statements": [
                {
                  "assignments": [
                    8352
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8352,
                      "mutability": "mutable",
                      "name": "promiseKey",
                      "nodeType": "VariableDeclaration",
                      "scope": 8362,
                      "src": "40619:18:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8351,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "40619:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8356,
                  "initialValue": {
                    "baseExpression": {
                      "id": 8353,
                      "name": "ordersPromise",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6459,
                      "src": "40640:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                        "typeString": "mapping(uint256 => bytes32)"
                      }
                    },
                    "id": 8355,
                    "indexExpression": {
                      "id": 8354,
                      "name": "_tokenIdSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8345,
                      "src": "40654:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "40640:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "40619:50:6"
                },
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 8357,
                        "name": "promises",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6444,
                        "src": "40687:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                          "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                        }
                      },
                      "id": 8359,
                      "indexExpression": {
                        "id": 8358,
                        "name": "promiseKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8352,
                        "src": "40696:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "40687:20:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_storage",
                        "typeString": "struct VoucherKernel.Promise storage ref"
                      }
                    },
                    "id": 8360,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "depositSe",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6424,
                    "src": "40687:30:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8350,
                  "id": 8361,
                  "nodeType": "Return",
                  "src": "40680:37:6"
                }
              ]
            },
            "documentation": {
              "id": 8343,
              "nodeType": "StructuredDocumentation",
              "src": "40313:159:6",
              "text": " @notice Get Seller deposit\n @param _tokenIdSupply   ID of the supply token\n @return                  returns sellers deposit"
            },
            "functionSelector": "88106323",
            "id": 8363,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSellerDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8347,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "40567:8:6"
            },
            "parameters": {
              "id": 8346,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8345,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8363,
                  "src": "40504:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8344,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40504:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "40503:24:6"
            },
            "returnParameters": {
              "id": 8350,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8349,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8363,
                  "src": "40594:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8348,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40594:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "40593:9:6"
            },
            "scope": 8535,
            "src": "40478:247:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9555
            ],
            "body": {
              "id": 8390,
              "nodeType": "Block",
              "src": "41117:219:6",
              "statements": [
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8376,
                            "name": "vouchersStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6463,
                            "src": "41150:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                              "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                            }
                          },
                          "id": 8378,
                          "indexExpression": {
                            "id": 8377,
                            "name": "_tokenIdVoucher",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8366,
                            "src": "41165:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "41150:31:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                            "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                          }
                        },
                        "id": 8379,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "status",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6259,
                        "src": "41150:38:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8380,
                            "name": "vouchersStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6463,
                            "src": "41203:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                              "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                            }
                          },
                          "id": 8382,
                          "indexExpression": {
                            "id": 8381,
                            "name": "_tokenIdVoucher",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8366,
                            "src": "41218:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "41203:31:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                            "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                          }
                        },
                        "id": 8383,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isPaymentReleased",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6261,
                        "src": "41203:49:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8384,
                            "name": "vouchersStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6463,
                            "src": "41267:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                              "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                            }
                          },
                          "id": 8386,
                          "indexExpression": {
                            "id": 8385,
                            "name": "_tokenIdVoucher",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8366,
                            "src": "41282:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "41267:31:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                            "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                          }
                        },
                        "id": 8387,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isDepositsReleased",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6263,
                        "src": "41267:50:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 8388,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "41135:193:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint8_$_t_bool_$_t_bool_$",
                      "typeString": "tuple(uint8,bool,bool)"
                    }
                  },
                  "functionReturnParameters": 8375,
                  "id": 8389,
                  "nodeType": "Return",
                  "src": "41128:200:6"
                }
              ]
            },
            "documentation": {
              "id": 8364,
              "nodeType": "StructuredDocumentation",
              "src": "40733:187:6",
              "text": " @notice Get the current status of a voucher\n @param _tokenIdVoucher   ID of the voucher token\n @return                  Status of the voucher (via enum)"
            },
            "functionSelector": "325a7a84",
            "id": 8391,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVoucherStatus",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8368,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "41016:8:6"
            },
            "parameters": {
              "id": 8367,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8366,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 8391,
                  "src": "40952:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8365,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40952:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "40951:25:6"
            },
            "returnParameters": {
              "id": 8375,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8370,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8391,
                  "src": "41057:5:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8369,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "41057:5:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8372,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8391,
                  "src": "41077:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8371,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "41077:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8374,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8391,
                  "src": "41096:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8373,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "41096:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "41042:69:6"
            },
            "scope": 8535,
            "src": "40926:410:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9571
            ],
            "body": {
              "id": 8407,
              "nodeType": "Block",
              "src": "41649:74:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8404,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8394,
                        "src": "41699:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 8401,
                            "name": "tokensContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6410,
                            "src": "41675:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8400,
                          "name": "IERC721",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9250,
                          "src": "41667:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC721_$9250_$",
                            "typeString": "type(contract IERC721)"
                          }
                        },
                        "id": 8402,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "41667:23:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC721_$9250",
                          "typeString": "contract IERC721"
                        }
                      },
                      "id": 8403,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ownerOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9183,
                      "src": "41667:31:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view external returns (address)"
                      }
                    },
                    "id": 8405,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "41667:48:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8399,
                  "id": 8406,
                  "nodeType": "Return",
                  "src": "41660:55:6"
                }
              ]
            },
            "documentation": {
              "id": 8392,
              "nodeType": "StructuredDocumentation",
              "src": "41344:168:6",
              "text": " @notice Get the holder of a voucher\n @param _tokenIdVoucher   ID of the voucher token\n @return                  Address of the holder"
            },
            "functionSelector": "f75951ce",
            "id": 8408,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVoucherHolder",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8396,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "41608:8:6"
            },
            "parameters": {
              "id": 8395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8394,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 8408,
                  "src": "41544:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "41544:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "41543:25:6"
            },
            "returnParameters": {
              "id": 8399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8398,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8408,
                  "src": "41635:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8397,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "41635:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "41634:9:6"
            },
            "scope": 8535,
            "src": "41518:205:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9563
            ],
            "body": {
              "id": 8428,
              "nodeType": "Block",
              "src": "42074:114:6",
              "statements": [
                {
                  "assignments": [
                    8418
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8418,
                      "mutability": "mutable",
                      "name": "promiseKey",
                      "nodeType": "VariableDeclaration",
                      "scope": 8428,
                      "src": "42085:18:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8417,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "42085:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8422,
                  "initialValue": {
                    "baseExpression": {
                      "id": 8419,
                      "name": "ordersPromise",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6459,
                      "src": "42106:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                        "typeString": "mapping(uint256 => bytes32)"
                      }
                    },
                    "id": 8421,
                    "indexExpression": {
                      "id": 8420,
                      "name": "_tokenIdSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8411,
                      "src": "42120:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "42106:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "42085:50:6"
                },
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 8423,
                        "name": "promises",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6444,
                        "src": "42153:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                          "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                        }
                      },
                      "id": 8425,
                      "indexExpression": {
                        "id": 8424,
                        "name": "promiseKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8418,
                        "src": "42162:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "42153:20:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_storage",
                        "typeString": "struct VoucherKernel.Promise storage ref"
                      }
                    },
                    "id": 8426,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "seller",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6416,
                    "src": "42153:27:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8416,
                  "id": 8427,
                  "nodeType": "Return",
                  "src": "42146:34:6"
                }
              ]
            },
            "documentation": {
              "id": 8409,
              "nodeType": "StructuredDocumentation",
              "src": "41731:208:6",
              "text": " @notice Get the holder of a supply\n @param _tokenIdSupply        ID of a promise which is mapped to the corresponding Promise\n @return                  Address of the holder"
            },
            "functionSelector": "1f38585f",
            "id": 8429,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSupplyHolder",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8413,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "42033:8:6"
            },
            "parameters": {
              "id": 8412,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8411,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "41970:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8410,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "41970:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "41969:24:6"
            },
            "returnParameters": {
              "id": 8416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8415,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "42060:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8414,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "42060:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "42059:9:6"
            },
            "scope": 8535,
            "src": "41945:243:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9471
            ],
            "body": {
              "id": 8443,
              "nodeType": "Block",
              "src": "42549:74:6",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 8438,
                        "name": "paymentDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6452,
                        "src": "42567:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherPaymentMethod_$6436_storage_$",
                          "typeString": "mapping(uint256 => struct VoucherKernel.VoucherPaymentMethod storage ref)"
                        }
                      },
                      "id": 8440,
                      "indexExpression": {
                        "id": 8439,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8432,
                        "src": "42582:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "42567:30:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VoucherPaymentMethod_$6436_storage",
                        "typeString": "struct VoucherKernel.VoucherPaymentMethod storage ref"
                      }
                    },
                    "id": 8441,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "addressTokenPrice",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6433,
                    "src": "42567:48:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8437,
                  "id": 8442,
                  "nodeType": "Return",
                  "src": "42560:55:6"
                }
              ]
            },
            "documentation": {
              "id": 8430,
              "nodeType": "StructuredDocumentation",
              "src": "42196:213:6",
              "text": " @notice Get the address of the token where the price for the supply is held\n @param _tokenIdSupply   ID of the voucher supply token\n @return                  Address of the token"
            },
            "functionSelector": "e875a613",
            "id": 8444,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVoucherPriceToken",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8434,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "42508:8:6"
            },
            "parameters": {
              "id": 8433,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8432,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8444,
                  "src": "42445:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8431,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "42445:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "42444:24:6"
            },
            "returnParameters": {
              "id": 8437,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8436,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8444,
                  "src": "42535:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8435,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "42535:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "42534:9:6"
            },
            "scope": 8535,
            "src": "42415:208:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9479
            ],
            "body": {
              "id": 8458,
              "nodeType": "Block",
              "src": "42990:77:6",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 8453,
                        "name": "paymentDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6452,
                        "src": "43008:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherPaymentMethod_$6436_storage_$",
                          "typeString": "mapping(uint256 => struct VoucherKernel.VoucherPaymentMethod storage ref)"
                        }
                      },
                      "id": 8455,
                      "indexExpression": {
                        "id": 8454,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8447,
                        "src": "43023:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "43008:30:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VoucherPaymentMethod_$6436_storage",
                        "typeString": "struct VoucherKernel.VoucherPaymentMethod storage ref"
                      }
                    },
                    "id": 8456,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "addressTokenDeposits",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6435,
                    "src": "43008:51:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8452,
                  "id": 8457,
                  "nodeType": "Return",
                  "src": "43001:58:6"
                }
              ]
            },
            "documentation": {
              "id": 8445,
              "nodeType": "StructuredDocumentation",
              "src": "42631:217:6",
              "text": " @notice Get the address of the token where the deposits for the supply are held\n @param _tokenIdSupply   ID of the voucher supply token\n @return                  Address of the token"
            },
            "functionSelector": "9a751bbd",
            "id": 8459,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVoucherDepositToken",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8449,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "42949:8:6"
            },
            "parameters": {
              "id": 8448,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8447,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8459,
                  "src": "42886:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8446,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "42886:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "42885:24:6"
            },
            "returnParameters": {
              "id": 8452,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8451,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8459,
                  "src": "42976:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8450,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "42976:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "42975:9:6"
            },
            "scope": 8535,
            "src": "42854:213:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9543
            ],
            "body": {
              "id": 8473,
              "nodeType": "Block",
              "src": "43410:70:6",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 8468,
                        "name": "paymentDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6452,
                        "src": "43428:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherPaymentMethod_$6436_storage_$",
                          "typeString": "mapping(uint256 => struct VoucherKernel.VoucherPaymentMethod storage ref)"
                        }
                      },
                      "id": 8470,
                      "indexExpression": {
                        "id": 8469,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8462,
                        "src": "43443:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "43428:30:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VoucherPaymentMethod_$6436_storage",
                        "typeString": "struct VoucherKernel.VoucherPaymentMethod storage ref"
                      }
                    },
                    "id": 8471,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "paymentMethod",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6431,
                    "src": "43428:44:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 8467,
                  "id": 8472,
                  "nodeType": "Return",
                  "src": "43421:51:6"
                }
              ]
            },
            "documentation": {
              "id": 8460,
              "nodeType": "StructuredDocumentation",
              "src": "43075:194:6",
              "text": " @notice Get the payment method for a particular _tokenIdSupply\n @param _tokenIdSupply   ID of the voucher supply token\n @return                  payment method"
            },
            "functionSelector": "1cf7955d",
            "id": 8474,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVoucherPaymentMethod",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8464,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "43371:8:6"
            },
            "parameters": {
              "id": 8463,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8462,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8474,
                  "src": "43308:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8461,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "43308:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "43307:24:6"
            },
            "returnParameters": {
              "id": 8467,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8466,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8474,
                  "src": "43398:5:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8465,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "43398:5:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "43397:7:6"
            },
            "scope": 8535,
            "src": "43275:205:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9579
            ],
            "body": {
              "id": 8511,
              "nodeType": "Block",
              "src": "43800:493:6",
              "statements": [
                {
                  "assignments": [
                    8484
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8484,
                      "mutability": "mutable",
                      "name": "tPromise",
                      "nodeType": "VariableDeclaration",
                      "scope": 8511,
                      "src": "43844:23:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                        "typeString": "struct VoucherKernel.Promise"
                      },
                      "typeName": {
                        "id": 8483,
                        "name": "Promise",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6429,
                        "src": "43844:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Promise_$6429_storage_ptr",
                          "typeString": "struct VoucherKernel.Promise"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8490,
                  "initialValue": {
                    "baseExpression": {
                      "id": 8485,
                      "name": "promises",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6444,
                      "src": "43883:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                        "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                      }
                    },
                    "id": 8489,
                    "indexExpression": {
                      "arguments": [
                        {
                          "id": 8487,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8477,
                          "src": "43918:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 8486,
                        "name": "getPromiseIdFromVoucherId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8260,
                        "src": "43892:25:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (uint256) view returns (bytes32)"
                        }
                      },
                      "id": 8488,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "43892:42:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "43883:52:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                      "typeString": "struct VoucherKernel.Promise storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "43844:91:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8496,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 8492,
                            "name": "tPromise",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8484,
                            "src": "43954:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                              "typeString": "struct VoucherKernel.Promise memory"
                            }
                          },
                          "id": 8493,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "validFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6418,
                          "src": "43954:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 8494,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "43976:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8495,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "43976:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "43954:37:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f56414c49444954595f46524f4d",
                        "id": 8497,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "43993:23:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3dfff879e12777f3cf58c41b18ee8a2fc08a4e09036528922690b3441120a816",
                          "typeString": "literal_string \"INVALID_VALIDITY_FROM\""
                        },
                        "value": "INVALID_VALIDITY_FROM"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3dfff879e12777f3cf58c41b18ee8a2fc08a4e09036528922690b3441120a816",
                          "typeString": "literal_string \"INVALID_VALIDITY_FROM\""
                        }
                      ],
                      "id": 8491,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "43946:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "43946:71:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8499,
                  "nodeType": "ExpressionStatement",
                  "src": "43946:71:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8505,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 8501,
                            "name": "tPromise",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8484,
                            "src": "44119:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                              "typeString": "struct VoucherKernel.Promise memory"
                            }
                          },
                          "id": 8502,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "validTo",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6420,
                          "src": "44119:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "expression": {
                            "id": 8503,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "44139:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "44139:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "44119:35:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f56414c49444954595f544f",
                        "id": 8506,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "44156:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_220023f3504a4654cffd768699d4a42a97da0536598d777263f15799e2323f90",
                          "typeString": "literal_string \"INVALID_VALIDITY_TO\""
                        },
                        "value": "INVALID_VALIDITY_TO"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_220023f3504a4654cffd768699d4a42a97da0536598d777263f15799e2323f90",
                          "typeString": "literal_string \"INVALID_VALIDITY_TO\""
                        }
                      ],
                      "id": 8500,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "44111:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "44111:67:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8508,
                  "nodeType": "ExpressionStatement",
                  "src": "44111:67:6"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 8509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "44281:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 8482,
                  "id": 8510,
                  "nodeType": "Return",
                  "src": "44274:11:6"
                }
              ]
            },
            "documentation": {
              "id": 8475,
              "nodeType": "StructuredDocumentation",
              "src": "43488:176:6",
              "text": " @notice Checks whether a voucher is in valid period for redemption (between start date and end date)\n @param _tokenIdVoucher ID of the voucher token"
            },
            "functionSelector": "9a0271e1",
            "id": 8512,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isInValidityPeriod",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8479,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "43762:8:6"
            },
            "parameters": {
              "id": 8478,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8477,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 8512,
                  "src": "43698:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8476,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "43698:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "43697:25:6"
            },
            "returnParameters": {
              "id": 8482,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8481,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8512,
                  "src": "43789:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8480,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "43789:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "43788:6:6"
            },
            "scope": 8535,
            "src": "43670:623:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9587
            ],
            "body": {
              "id": 8533,
              "nodeType": "Block",
              "src": "44622:170:6",
              "statements": [
                {
                  "expression": {
                    "id": 8531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "44640:144:6",
                    "subExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 8529,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 8521,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "44656:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 8523,
                              "indexExpression": {
                                "id": 8522,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8515,
                                "src": "44671:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "44656:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 8524,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isPaymentReleased",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6261,
                            "src": "44656:49:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 8525,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "44723:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 8527,
                              "indexExpression": {
                                "id": 8526,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8515,
                                "src": "44738:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "44723:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 8528,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isDepositsReleased",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6263,
                            "src": "44723:50:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "44656:117:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8530,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "44641:143:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8520,
                  "id": 8532,
                  "nodeType": "Return",
                  "src": "44633:151:6"
                }
              ]
            },
            "documentation": {
              "id": 8513,
              "nodeType": "StructuredDocumentation",
              "src": "44301:223:6",
              "text": " @notice Checks whether a voucher is in valid state to be transferred. If either payments or deposits are released, voucher could not be transferred\n @param _tokenIdVoucher ID of the voucher token"
            },
            "functionSelector": "5b479d1a",
            "id": 8534,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isVoucherTransferable",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8517,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "44593:8:6"
            },
            "parameters": {
              "id": 8516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8515,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 8534,
                  "src": "44561:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8514,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "44561:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "44560:25:6"
            },
            "returnParameters": {
              "id": 8520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8519,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8534,
                  "src": "44616:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8518,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "44616:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "44615:6:6"
            },
            "scope": 8535,
            "src": "44530:262:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 8536,
        "src": "1169:43626:6"
      }
    ],
    "src": "49:44748:6"
  },
  "legacyAST": {
    "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/VoucherKernel.sol",
    "exportedSymbols": {
      "VoucherKernel": [
        8535
      ]
    },
    "id": 8536,
    "license": "LGPL-3.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6382,
        "literals": [
          "solidity",
          "0.7",
          ".1"
        ],
        "nodeType": "PragmaDirective",
        "src": "49:22:6"
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
        "file": "@openzeppelin/contracts/utils/Address.sol",
        "id": 6383,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 11437,
        "src": "75:51:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 6384,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 10495,
        "src": "128:52:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Pausable.sol",
        "file": "@openzeppelin/contracts/utils/Pausable.sol",
        "id": 6385,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 12044,
        "src": "182:52:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 6386,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 10850,
        "src": "236:51:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155.sol",
        "file": "./interfaces/IERC1155.sol",
        "id": 6387,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 8932,
        "src": "289:35:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC165.sol",
        "file": "./interfaces/IERC165.sol",
        "id": 6388,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 9026,
        "src": "326:34:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC721.sol",
        "file": "./interfaces/IERC721.sol",
        "id": 6389,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 9251,
        "src": "362:34:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC1155ERC721.sol",
        "file": "./interfaces/IERC1155ERC721.sol",
        "id": 6390,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 8976,
        "src": "398:41:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IERC721TokenReceiver.sol",
        "file": "./interfaces/IERC721TokenReceiver.sol",
        "id": 6391,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 9269,
        "src": "441:47:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/interfaces/IVoucherKernel.sol",
        "file": "./interfaces/IVoucherKernel.sol",
        "id": 6392,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 9589,
        "src": "490:41:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/E/Ludo/Documents/Developpement/BOSON/contracts/contracts/UsingHelpers.sol",
        "file": "./UsingHelpers.sol",
        "id": 6393,
        "nodeType": "ImportDirective",
        "scope": 8536,
        "sourceUnit": 6381,
        "src": "533:28:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 6395,
              "name": "IVoucherKernel",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9588,
              "src": "1195:14:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IVoucherKernel_$9588",
                "typeString": "contract IVoucherKernel"
              }
            },
            "id": 6396,
            "nodeType": "InheritanceSpecifier",
            "src": "1195:14:6"
          },
          {
            "baseName": {
              "id": 6397,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10494,
              "src": "1211:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$10494",
                "typeString": "contract Ownable"
              }
            },
            "id": 6398,
            "nodeType": "InheritanceSpecifier",
            "src": "1211:7:6"
          },
          {
            "baseName": {
              "id": 6399,
              "name": "Pausable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12043,
              "src": "1220:8:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Pausable_$12043",
                "typeString": "contract Pausable"
              }
            },
            "id": 6400,
            "nodeType": "InheritanceSpecifier",
            "src": "1220:8:6"
          },
          {
            "baseName": {
              "id": 6401,
              "name": "UsingHelpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6380,
              "src": "1230:12:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_UsingHelpers_$6380",
                "typeString": "contract UsingHelpers"
              }
            },
            "id": 6402,
            "nodeType": "InheritanceSpecifier",
            "src": "1230:12:6"
          }
        ],
        "contractDependencies": [
          6380,
          9588,
          10494,
          11459,
          12043
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 6394,
          "nodeType": "StructuredDocumentation",
          "src": "612:525:6",
          "text": " @title VoucherKernel contract is controlling the core business logic\n @dev Notes:\n  - Since this is a reference app, it is not yet optimized.\n      In the next phase, the bulk raw data will be packed into a single bytes32 field and/or pushed off-chain.\n  - The usage of block.timestamp is honored since vouchers are defined currently with day-precision.\n      See: https://ethereum.stackexchange.com/questions/5924/how-do-ethereum-mining-nodes-maintain-a-time-consistent-with-the-network/5931#5931"
        },
        "fullyImplemented": true,
        "id": 8535,
        "linearizedBaseContracts": [
          8535,
          6380,
          12043,
          10494,
          11459,
          9588
        ],
        "name": "VoucherKernel",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 6405,
            "libraryName": {
              "id": 6403,
              "name": "Address",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11436,
              "src": "1256:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Address_$11436",
                "typeString": "library Address"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1250:26:6",
            "typeName": {
              "id": 6404,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1268:7:6",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 6408,
            "libraryName": {
              "id": 6406,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10849,
              "src": "1288:8:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$10849",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1282:27:6",
            "typeName": {
              "id": 6407,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1301:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "functionSelector": "7518fa98",
            "id": 6410,
            "mutability": "mutable",
            "name": "tokensContract",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "1353:29:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6409,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1353:7:6",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "canonicalName": "VoucherKernel.Promise",
            "id": 6429,
            "members": [
              {
                "constant": false,
                "id": 6412,
                "mutability": "mutable",
                "name": "promiseId",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1496:17:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 6411,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1496:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6414,
                "mutability": "mutable",
                "name": "nonce",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1524:13:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 6413,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1524:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6416,
                "mutability": "mutable",
                "name": "seller",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1576:14:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 6415,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1576:7:6",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6418,
                "mutability": "mutable",
                "name": "validFrom",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1757:17:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 6417,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1757:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6420,
                "mutability": "mutable",
                "name": "validTo",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1785:15:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 6419,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1785:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6422,
                "mutability": "mutable",
                "name": "price",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1811:13:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 6421,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1811:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6424,
                "mutability": "mutable",
                "name": "depositSe",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1835:17:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 6423,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1835:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6426,
                "mutability": "mutable",
                "name": "depositBu",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1863:17:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 6425,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1863:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6428,
                "mutability": "mutable",
                "name": "idx",
                "nodeType": "VariableDeclaration",
                "scope": 6429,
                "src": "1891:11:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 6427,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1891:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Promise",
            "nodeType": "StructDefinition",
            "scope": 8535,
            "src": "1470:440:6",
            "visibility": "public"
          },
          {
            "canonicalName": "VoucherKernel.VoucherPaymentMethod",
            "id": 6436,
            "members": [
              {
                "constant": false,
                "id": 6431,
                "mutability": "mutable",
                "name": "paymentMethod",
                "nodeType": "VariableDeclaration",
                "scope": 6436,
                "src": "1957:19:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 6430,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "1957:5:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6433,
                "mutability": "mutable",
                "name": "addressTokenPrice",
                "nodeType": "VariableDeclaration",
                "scope": 6436,
                "src": "1987:25:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 6432,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1987:7:6",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 6435,
                "mutability": "mutable",
                "name": "addressTokenDeposits",
                "nodeType": "VariableDeclaration",
                "scope": 6436,
                "src": "2023:28:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 6434,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2023:7:6",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "VoucherPaymentMethod",
            "nodeType": "StructDefinition",
            "scope": 8535,
            "src": "1918:141:6",
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8cfb578e",
            "id": 6438,
            "mutability": "mutable",
            "name": "bosonRouterAddress",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2067:33:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6437,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "2067:7:6",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "4f755c3e",
            "id": 6440,
            "mutability": "mutable",
            "name": "cashierAddress",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2146:29:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 6439,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "2146:7:6",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "cc2f84cb",
            "id": 6444,
            "mutability": "mutable",
            "name": "promises",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2218:43:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
              "typeString": "mapping(bytes32 => struct VoucherKernel.Promise)"
            },
            "typeName": {
              "id": 6443,
              "keyType": {
                "id": 6441,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2226:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2218:27:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                "typeString": "mapping(bytes32 => struct VoucherKernel.Promise)"
              },
              "valueType": {
                "id": 6442,
                "name": "Promise",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 6429,
                "src": "2237:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Promise_$6429_storage_ptr",
                  "typeString": "struct VoucherKernel.Promise"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "817b3084",
            "id": 6448,
            "mutability": "mutable",
            "name": "tokenNonces",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2308:46:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 6447,
              "keyType": {
                "id": 6445,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2316:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2308:27:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 6446,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2327:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "e5d5f9ac",
            "id": 6452,
            "mutability": "mutable",
            "name": "paymentDetails",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2500:62:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherPaymentMethod_$6436_storage_$",
              "typeString": "mapping(uint256 => struct VoucherKernel.VoucherPaymentMethod)"
            },
            "typeName": {
              "id": 6451,
              "keyType": {
                "id": 6449,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2508:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "2500:40:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherPaymentMethod_$6436_storage_$",
                "typeString": "mapping(uint256 => struct VoucherKernel.VoucherPaymentMethod)"
              },
              "valueType": {
                "id": 6450,
                "name": "VoucherPaymentMethod",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 6436,
                "src": "2519:20:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_VoucherPaymentMethod_$6436_storage_ptr",
                  "typeString": "struct VoucherKernel.VoucherPaymentMethod"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "16ed9e0e",
            "id": 6455,
            "mutability": "mutable",
            "name": "promiseKeys",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2612:28:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
              "typeString": "bytes32[]"
            },
            "typeName": {
              "baseType": {
                "id": 6453,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2612:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "id": 6454,
              "nodeType": "ArrayTypeName",
              "src": "2612:9:6",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                "typeString": "bytes32[]"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "75a83102",
            "id": 6459,
            "mutability": "mutable",
            "name": "ordersPromise",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2649:48:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
              "typeString": "mapping(uint256 => bytes32)"
            },
            "typeName": {
              "id": 6458,
              "keyType": {
                "id": 6456,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2657:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "2649:27:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                "typeString": "mapping(uint256 => bytes32)"
              },
              "valueType": {
                "id": 6457,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2668:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "ec29c17d",
            "id": 6463,
            "mutability": "mutable",
            "name": "vouchersStatus",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2780:55:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
              "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus)"
            },
            "typeName": {
              "id": 6462,
              "keyType": {
                "id": 6460,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2788:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "2780:33:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus)"
              },
              "valueType": {
                "id": 6461,
                "name": "VoucherStatus",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 6268,
                "src": "2799:13:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage_ptr",
                  "typeString": "struct UsingHelpers.VoucherStatus"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 6469,
            "mutability": "mutable",
            "name": "balances",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "2900:64:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(uint256 => mapping(address => uint256))"
            },
            "typeName": {
              "id": 6468,
              "keyType": {
                "id": 6464,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2908:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "2900:47:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(uint256 => mapping(address => uint256))"
              },
              "valueType": {
                "id": 6467,
                "keyType": {
                  "id": 6465,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2927:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "2919:27:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 6466,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2938:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 6475,
            "mutability": "mutable",
            "name": "operatorApprovals",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "3008:70:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
              "typeString": "mapping(address => mapping(address => bool))"
            },
            "typeName": {
              "id": 6474,
              "keyType": {
                "id": 6470,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "3016:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "3008:44:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                "typeString": "mapping(address => mapping(address => bool))"
              },
              "valueType": {
                "id": 6473,
                "keyType": {
                  "id": 6471,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3035:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "3027:24:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "valueType": {
                  "id": 6472,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "3046:4:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "functionSelector": "99c849b8",
            "id": 6479,
            "mutability": "mutable",
            "name": "typeCounters",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "3140:47:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 6478,
              "keyType": {
                "id": 6476,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "3148:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "3140:27:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueType": {
                "id": 6477,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "3159:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "7ed06c44",
            "id": 6491,
            "mutability": "constant",
            "name": "MASK_TYPE",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "3239:63:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6480,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "3239:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "commonType": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              },
              "id": 6490,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "arguments": [
                  {
                    "arguments": [
                      {
                        "id": 6486,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "~",
                        "prefix": true,
                        "src": "3291:2:6",
                        "subExpression": {
                          "hexValue": "30",
                          "id": 6485,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3292:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_minus_1_by_1",
                          "typeString": "int_const -1"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_minus_1_by_1",
                          "typeString": "int_const -1"
                        }
                      ],
                      "id": 6484,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "3283:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint128_$",
                        "typeString": "type(uint128)"
                      },
                      "typeName": {
                        "id": 6483,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "3283:7:6",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 6487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3283:11:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  }
                ],
                "expression": {
                  "argumentTypes": [
                    {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  ],
                  "id": 6482,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "ElementaryTypeNameExpression",
                  "src": "3275:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_uint256_$",
                    "typeString": "type(uint256)"
                  },
                  "typeName": {
                    "id": 6481,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3275:7:6",
                    "typeDescriptions": {}
                  }
                },
                "id": 6488,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "typeConversion",
                "lValueRequested": false,
                "names": [],
                "nodeType": "FunctionCall",
                "src": "3275:20:6",
                "tryCall": false,
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "BinaryOperation",
              "operator": "<<",
              "rightExpression": {
                "hexValue": "313238",
                "id": 6489,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "3299:3:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_128_by_1",
                  "typeString": "int_const 128"
                },
                "value": "128"
              },
              "src": "3275:27:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "21d6f3a7",
            "id": 6498,
            "mutability": "constant",
            "name": "MASK_NF_INDEX",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "3613:51:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6492,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "3613:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "arguments": [
                {
                  "id": 6496,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "UnaryOperation",
                  "operator": "~",
                  "prefix": true,
                  "src": "3661:2:6",
                  "subExpression": {
                    "hexValue": "30",
                    "id": 6495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3662:1:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_minus_1_by_1",
                    "typeString": "int_const -1"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_minus_1_by_1",
                    "typeString": "int_const -1"
                  }
                ],
                "id": 6494,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "3653:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint128_$",
                  "typeString": "type(uint128)"
                },
                "typeName": {
                  "id": 6493,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "3653:7:6",
                  "typeDescriptions": {}
                }
              },
              "id": 6497,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "3653:11:6",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "d905af55",
            "id": 6503,
            "mutability": "constant",
            "name": "TYPE_NF_BIT",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "3984:46:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6499,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "3984:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "commonType": {
                "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                "typeString": "int_const 5789...(69 digits omitted)...9968"
              },
              "id": 6502,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "hexValue": "31",
                "id": 6500,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "4022:1:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1_by_1",
                  "typeString": "int_const 1"
                },
                "value": "1"
              },
              "nodeType": "BinaryOperation",
              "operator": "<<",
              "rightExpression": {
                "hexValue": "323535",
                "id": 6501,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "4027:3:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_255_by_1",
                  "typeString": "int_const 255"
                },
                "value": "255"
              },
              "src": "4022:8:6",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                "typeString": "int_const 5789...(69 digits omitted)...9968"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8f940f63",
            "id": 6505,
            "mutability": "mutable",
            "name": "typeId",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "4342:21:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6504,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "4342:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "f3223bed",
            "id": 6507,
            "mutability": "mutable",
            "name": "complainPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "5052:29:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6506,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "5052:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "76942aed",
            "id": 6509,
            "mutability": "mutable",
            "name": "cancelFaultPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 8535,
            "src": "5088:32:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 6508,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "5088:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 6523,
            "name": "LogPromiseCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6522,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6511,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_promiseId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6523,
                  "src": "5163:26:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6510,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5163:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6513,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 6523,
                  "src": "5200:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6512,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5200:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6515,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_seller",
                  "nodeType": "VariableDeclaration",
                  "scope": 6523,
                  "src": "5233:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6514,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5233:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6517,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_validFrom",
                  "nodeType": "VariableDeclaration",
                  "scope": 6523,
                  "src": "5267:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6516,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5267:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6519,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_validTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 6523,
                  "src": "5296:16:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6518,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5296:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6521,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_idx",
                  "nodeType": "VariableDeclaration",
                  "scope": 6523,
                  "src": "5323:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6520,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5323:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5152:190:6"
            },
            "src": "5129:214:6"
          },
          {
            "anonymous": false,
            "id": 6537,
            "name": "LogVoucherDelivered",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6536,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6525,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 6537,
                  "src": "5387:30:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6524,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5387:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6527,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6537,
                  "src": "5428:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6526,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5428:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6529,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nodeType": "VariableDeclaration",
                  "scope": 6537,
                  "src": "5462:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6528,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5462:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6531,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 6537,
                  "src": "5488:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6530,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5488:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6533,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_promiseId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6537,
                  "src": "5514:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6532,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5514:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6535,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_correlationId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6537,
                  "src": "5543:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6534,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5543:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5376:196:6"
            },
            "src": "5351:222:6"
          },
          {
            "anonymous": false,
            "id": 6545,
            "name": "LogVoucherRedeemed",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6539,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6545,
                  "src": "5616:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6538,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5616:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6541,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 6545,
                  "src": "5650:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6540,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5650:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6543,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_promiseId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6545,
                  "src": "5676:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6542,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5676:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5605:96:6"
            },
            "src": "5581:121:6"
          },
          {
            "anonymous": false,
            "id": 6549,
            "name": "LogVoucherRefunded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6548,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6547,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6549,
                  "src": "5735:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6546,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5735:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5734:25:6"
            },
            "src": "5710:50:6"
          },
          {
            "anonymous": false,
            "id": 6553,
            "name": "LogVoucherComplain",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6552,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6551,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6553,
                  "src": "5793:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6550,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5793:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5792:25:6"
            },
            "src": "5768:50:6"
          },
          {
            "anonymous": false,
            "id": 6557,
            "name": "LogVoucherFaultCancel",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6556,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6555,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6557,
                  "src": "5854:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6554,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5854:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5853:25:6"
            },
            "src": "5826:53:6"
          },
          {
            "anonymous": false,
            "id": 6563,
            "name": "LogExpirationTriggered",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6559,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6563,
                  "src": "5916:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6558,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5916:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6561,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 6563,
                  "src": "5941:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6560,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5941:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5915:47:6"
            },
            "src": "5887:76:6"
          },
          {
            "anonymous": false,
            "id": 6569,
            "name": "LogFinalizeVoucher",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6568,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6565,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6569,
                  "src": "5996:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6564,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5996:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6567,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 6569,
                  "src": "6021:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6566,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6021:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5995:47:6"
            },
            "src": "5971:72:6"
          },
          {
            "anonymous": false,
            "id": 6575,
            "name": "LogBosonRouterSet",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6574,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6571,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newBosonRouter",
                  "nodeType": "VariableDeclaration",
                  "scope": 6575,
                  "src": "6075:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6570,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6075:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6573,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 6575,
                  "src": "6100:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6572,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6100:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6074:47:6"
            },
            "src": "6051:71:6"
          },
          {
            "anonymous": false,
            "id": 6581,
            "name": "LogCashierSet",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6580,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6577,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newCashier",
                  "nodeType": "VariableDeclaration",
                  "scope": 6581,
                  "src": "6150:19:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6576,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6150:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6579,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 6581,
                  "src": "6171:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6578,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6171:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6149:43:6"
            },
            "src": "6130:63:6"
          },
          {
            "anonymous": false,
            "id": 6587,
            "name": "LogComplainPeriodChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6586,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6583,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newComplainPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 6587,
                  "src": "6242:26:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6582,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6242:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6585,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 6587,
                  "src": "6279:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6584,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6279:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6231:75:6"
            },
            "src": "6201:106:6"
          },
          {
            "anonymous": false,
            "id": 6593,
            "name": "LogCancelFaultPeriodChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6592,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6589,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newCancelFaultPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 6593,
                  "src": "6359:29:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6588,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6359:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6591,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_triggeredBy",
                  "nodeType": "VariableDeclaration",
                  "scope": 6593,
                  "src": "6399:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6590,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6399:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6348:78:6"
            },
            "src": "6315:112:6"
          },
          {
            "anonymous": false,
            "id": 6599,
            "name": "LogVoucherSetFaultCancel",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6598,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6595,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 6599,
                  "src": "6466:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6594,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6466:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6597,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nodeType": "VariableDeclaration",
                  "scope": 6599,
                  "src": "6490:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6596,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6490:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6465:41:6"
            },
            "src": "6435:72:6"
          },
          {
            "anonymous": false,
            "id": 6605,
            "name": "LogFundsReleased",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6604,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6601,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6605,
                  "src": "6548:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6600,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6548:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6603,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 6605,
                  "src": "6582:11:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 6602,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "6582:5:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6537:93:6"
            },
            "src": "6515:116:6"
          },
          {
            "body": {
              "id": 6626,
              "nodeType": "Block",
              "src": "6665:335:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6613,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6608,
                          "name": "bosonRouterAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6438,
                          "src": "6684:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 6611,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6714:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6610,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6706:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 6609,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "6706:7:6",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6612,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6706:10:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "6684:32:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4252",
                        "id": 6614,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6718:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_18baaaaee96e1a52a1a9672a774ac9edad16efea4f02bd536aa73e966587bacf",
                          "typeString": "literal_string \"UNSPECIFIED_BR\""
                        },
                        "value": "UNSPECIFIED_BR"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_18baaaaee96e1a52a1a9672a774ac9edad16efea4f02bd536aa73e966587bacf",
                          "typeString": "literal_string \"UNSPECIFIED_BR\""
                        }
                      ],
                      "id": 6607,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6676:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6676:59:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6616,
                  "nodeType": "ExpressionStatement",
                  "src": "6676:59:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6621,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 6618,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "6844:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6619,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "6844:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 6620,
                          "name": "bosonRouterAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6438,
                          "src": "6858:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6844:32:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f4252",
                        "id": 6622,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6878:17:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d74964594bc025886ff5bcef2e33845052a9330085a182179ea7b04b36730cd6",
                          "typeString": "literal_string \"UNAUTHORIZED_BR\""
                        },
                        "value": "UNAUTHORIZED_BR"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d74964594bc025886ff5bcef2e33845052a9330085a182179ea7b04b36730cd6",
                          "typeString": "literal_string \"UNAUTHORIZED_BR\""
                        }
                      ],
                      "id": 6617,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6836:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6836:60:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6624,
                  "nodeType": "ExpressionStatement",
                  "src": "6836:60:6"
                },
                {
                  "id": 6625,
                  "nodeType": "PlaceholderStatement",
                  "src": "6991:1:6"
                }
              ]
            },
            "id": 6627,
            "name": "onlyFromRouter",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 6606,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6662:2:6"
            },
            "src": "6639:361:6",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6648,
              "nodeType": "Block",
              "src": "7035:326:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6635,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6630,
                          "name": "cashierAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6440,
                          "src": "7054:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 6633,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7080:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6632,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7072:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 6631,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7072:7:6",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6634,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7072:10:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "7054:28:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4252",
                        "id": 6636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7084:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_18baaaaee96e1a52a1a9672a774ac9edad16efea4f02bd536aa73e966587bacf",
                          "typeString": "literal_string \"UNSPECIFIED_BR\""
                        },
                        "value": "UNSPECIFIED_BR"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_18baaaaee96e1a52a1a9672a774ac9edad16efea4f02bd536aa73e966587bacf",
                          "typeString": "literal_string \"UNSPECIFIED_BR\""
                        }
                      ],
                      "id": 6629,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7046:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7046:55:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6638,
                  "nodeType": "ExpressionStatement",
                  "src": "7046:55:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6643,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 6640,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "7210:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 6641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "7210:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 6642,
                          "name": "cashierAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6440,
                          "src": "7224:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7210:28:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f43",
                        "id": 6644,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7240:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4285f49d3474576aa1214b2208fc063cca9fb8066c1dc66e1b2fc597a667635e",
                          "typeString": "literal_string \"UNAUTHORIZED_C\""
                        },
                        "value": "UNAUTHORIZED_C"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4285f49d3474576aa1214b2208fc063cca9fb8066c1dc66e1b2fc597a667635e",
                          "typeString": "literal_string \"UNAUTHORIZED_C\""
                        }
                      ],
                      "id": 6639,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7202:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6645,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7202:55:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6646,
                  "nodeType": "ExpressionStatement",
                  "src": "7202:55:6"
                },
                {
                  "id": 6647,
                  "nodeType": "PlaceholderStatement",
                  "src": "7352:1:6"
                }
              ]
            },
            "id": 6649,
            "name": "onlyFromCashier",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 6628,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7032:2:6"
            },
            "src": "7008:353:6",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6668,
              "nodeType": "Block",
              "src": "7437:269:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6663,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 6660,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6651,
                              "src": "7533:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6657,
                                  "name": "tokensContract",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6410,
                                  "src": "7509:14:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6656,
                                "name": "IERC721",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9250,
                                "src": "7501:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC721_$9250_$",
                                  "typeString": "type(contract IERC721)"
                                }
                              },
                              "id": 6658,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7501:23:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC721_$9250",
                                "typeString": "contract IERC721"
                              }
                            },
                            "id": 6659,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "ownerOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9183,
                            "src": "7501:31:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view external returns (address)"
                            }
                          },
                          "id": 6661,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7501:48:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 6662,
                          "name": "_sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6653,
                          "src": "7553:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7501:59:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f56",
                        "id": 6664,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7575:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9ccf69668761bd89899c0c9012c57fbf9aa514461640630aa772878c5e0bf2e6",
                          "typeString": "literal_string \"UNAUTHORIZED_V\""
                        },
                        "value": "UNAUTHORIZED_V"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9ccf69668761bd89899c0c9012c57fbf9aa514461640630aa772878c5e0bf2e6",
                          "typeString": "literal_string \"UNAUTHORIZED_V\""
                        }
                      ],
                      "id": 6655,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7479:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7479:123:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6666,
                  "nodeType": "ExpressionStatement",
                  "src": "7479:123:6"
                },
                {
                  "id": 6667,
                  "nodeType": "PlaceholderStatement",
                  "src": "7697:1:6"
                }
              ]
            },
            "id": 6669,
            "name": "onlyVoucherOwner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 6654,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6651,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 6669,
                  "src": "7395:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6650,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7395:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6653,
                  "mutability": "mutable",
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 6669,
                  "src": "7420:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6652,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7420:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7394:42:6"
            },
            "src": "7369:337:6",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6690,
              "nodeType": "Block",
              "src": "7751:132:6",
              "statements": [
                {
                  "expression": {
                    "id": 6676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 6674,
                      "name": "tokensContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6410,
                      "src": "7762:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 6675,
                      "name": "_tokensContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6671,
                      "src": "7779:15:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7762:32:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6677,
                  "nodeType": "ExpressionStatement",
                  "src": "7762:32:6"
                },
                {
                  "expression": {
                    "id": 6682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 6678,
                      "name": "complainPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6507,
                      "src": "7807:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_rational_604800_by_1",
                        "typeString": "int_const 604800"
                      },
                      "id": 6681,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "37",
                        "id": 6679,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7824:1:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_7_by_1",
                          "typeString": "int_const 7"
                        },
                        "value": "7"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 6680,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7828:6:6",
                        "subdenomination": "days",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_86400_by_1",
                          "typeString": "int_const 86400"
                        },
                        "value": "1"
                      },
                      "src": "7824:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_604800_by_1",
                        "typeString": "int_const 604800"
                      }
                    },
                    "src": "7807:27:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6683,
                  "nodeType": "ExpressionStatement",
                  "src": "7807:27:6"
                },
                {
                  "expression": {
                    "id": 6688,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 6684,
                      "name": "cancelFaultPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6509,
                      "src": "7845:17:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_rational_604800_by_1",
                        "typeString": "int_const 604800"
                      },
                      "id": 6687,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "37",
                        "id": 6685,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7865:1:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_7_by_1",
                          "typeString": "int_const 7"
                        },
                        "value": "7"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 6686,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7869:6:6",
                        "subdenomination": "days",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_86400_by_1",
                          "typeString": "int_const 86400"
                        },
                        "value": "1"
                      },
                      "src": "7865:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_604800_by_1",
                        "typeString": "int_const 604800"
                      }
                    },
                    "src": "7845:30:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 6689,
                  "nodeType": "ExpressionStatement",
                  "src": "7845:30:6"
                }
              ]
            },
            "id": 6691,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6672,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6671,
                  "mutability": "mutable",
                  "name": "_tokensContract",
                  "nodeType": "VariableDeclaration",
                  "scope": 6691,
                  "src": "7726:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6670,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7726:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7725:25:6"
            },
            "returnParameters": {
              "id": 6673,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7751:0:6"
            },
            "scope": 8535,
            "src": "7714:169:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9305
            ],
            "body": {
              "id": 6701,
              "nodeType": "Block",
              "src": "8115:27:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 6698,
                      "name": "_pause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12026,
                      "src": "8126:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 6699,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8126:8:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6700,
                  "nodeType": "ExpressionStatement",
                  "src": "8126:8:6"
                }
              ]
            },
            "documentation": {
              "id": 6692,
              "nodeType": "StructuredDocumentation",
              "src": "7891:168:6",
              "text": " @notice Pause the process of interaction with voucherID's (ERC-721), in case of emergency.\n Only BR contract is in control of this function."
            },
            "functionSelector": "8456cb59",
            "id": 6702,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 6696,
                "modifierName": {
                  "id": 6695,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "8100:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8100:14:6"
              }
            ],
            "name": "pause",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 6694,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8091:8:6"
            },
            "parameters": {
              "id": 6693,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8079:2:6"
            },
            "returnParameters": {
              "id": 6697,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8115:0:6"
            },
            "scope": 8535,
            "src": "8065:77:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9309
            ],
            "body": {
              "id": 6712,
              "nodeType": "Block",
              "src": "8356:29:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 6709,
                      "name": "_unpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12042,
                      "src": "8367:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 6710,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8367:10:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6711,
                  "nodeType": "ExpressionStatement",
                  "src": "8367:10:6"
                }
              ]
            },
            "documentation": {
              "id": 6703,
              "nodeType": "StructuredDocumentation",
              "src": "8150:148:6",
              "text": " @notice Unpause the process of interaction with voucherID's (ERC-721).\n Only BR contract is in control of this function."
            },
            "functionSelector": "3f4ba83a",
            "id": 6713,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 6707,
                "modifierName": {
                  "id": 6706,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "8341:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8341:14:6"
              }
            ],
            "name": "unpause",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 6705,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8332:8:6"
            },
            "parameters": {
              "id": 6704,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8320:2:6"
            },
            "returnParameters": {
              "id": 6708,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8356:0:6"
            },
            "scope": 8535,
            "src": "8304:81:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9329
            ],
            "body": {
              "id": 6833,
              "nodeType": "Block",
              "src": "9124:1451:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6739,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6737,
                          "name": "_validFrom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6718,
                          "src": "9143:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "id": 6738,
                          "name": "_validTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6720,
                          "src": "9157:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9143:22:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f56414c49444954595f46524f4d",
                        "id": 6740,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9167:23:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3dfff879e12777f3cf58c41b18ee8a2fc08a4e09036528922690b3441120a816",
                          "typeString": "literal_string \"INVALID_VALIDITY_FROM\""
                        },
                        "value": "INVALID_VALIDITY_FROM"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3dfff879e12777f3cf58c41b18ee8a2fc08a4e09036528922690b3441120a816",
                          "typeString": "literal_string \"INVALID_VALIDITY_FROM\""
                        }
                      ],
                      "id": 6736,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9135:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9135:56:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6742,
                  "nodeType": "ExpressionStatement",
                  "src": "9135:56:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6749,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6744,
                          "name": "_validTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6720,
                          "src": "9348:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 6745,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "9360:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 6746,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "9360:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "hexValue": "35",
                            "id": 6747,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9378:9:6",
                            "subdenomination": "minutes",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_300_by_1",
                              "typeString": "int_const 300"
                            },
                            "value": "5"
                          },
                          "src": "9360:27:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9348:39:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f56414c49444954595f544f",
                        "id": 6750,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9389:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_220023f3504a4654cffd768699d4a42a97da0536598d777263f15799e2323f90",
                          "typeString": "literal_string \"INVALID_VALIDITY_TO\""
                        },
                        "value": "INVALID_VALIDITY_TO"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_220023f3504a4654cffd768699d4a42a97da0536598d777263f15799e2323f90",
                          "typeString": "literal_string \"INVALID_VALIDITY_TO\""
                        }
                      ],
                      "id": 6743,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9340:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6751,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9340:71:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6752,
                  "nodeType": "ExpressionStatement",
                  "src": "9340:71:6"
                },
                {
                  "assignments": [
                    6754
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6754,
                      "mutability": "mutable",
                      "name": "key",
                      "nodeType": "VariableDeclaration",
                      "scope": 6833,
                      "src": "9602:11:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6753,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9602:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 6755,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9602:11:6"
                },
                {
                  "expression": {
                    "id": 6768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 6756,
                      "name": "key",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6754,
                      "src": "9624:3:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 6763,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": false,
                              "src": "9671:22:6",
                              "subExpression": {
                                "baseExpression": {
                                  "id": 6760,
                                  "name": "tokenNonces",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6448,
                                  "src": "9671:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 6762,
                                "indexExpression": {
                                  "id": 6761,
                                  "name": "_seller",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6716,
                                  "src": "9683:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "9671:20:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 6764,
                              "name": "_validFrom",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6718,
                              "src": "9695:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 6765,
                              "name": "_validTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6720,
                              "src": "9707:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 6758,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "9654:3:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 6759,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "9654:16:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 6766,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9654:62:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 6757,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "9630:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 6767,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9630:97:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "9624:103:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 6769,
                  "nodeType": "ExpressionStatement",
                  "src": "9624:103:6"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6773,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 6770,
                        "name": "promiseKeys",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6455,
                        "src": "9744:11:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 6771,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "9744:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 6772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9765:1:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9744:22:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6787,
                  "nodeType": "IfStatement",
                  "src": "9740:176:6",
                  "trueBody": {
                    "id": 6786,
                    "nodeType": "Block",
                    "src": "9768:148:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 6782,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 6775,
                                  "name": "promiseKeys",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6455,
                                  "src": "9809:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                    "typeString": "bytes32[] storage ref"
                                  }
                                },
                                "id": 6780,
                                "indexExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 6776,
                                      "name": "promises",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6444,
                                      "src": "9821:8:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                                        "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                                      }
                                    },
                                    "id": 6778,
                                    "indexExpression": {
                                      "id": 6777,
                                      "name": "key",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6754,
                                      "src": "9830:3:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "9821:13:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                                      "typeString": "struct VoucherKernel.Promise storage ref"
                                    }
                                  },
                                  "id": 6779,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "idx",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6428,
                                  "src": "9821:17:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9809:30:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "id": 6781,
                                "name": "key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6754,
                                "src": "9843:3:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "src": "9809:37:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "50524f4d4953455f414c52454144595f455849535453",
                              "id": 6783,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9865:24:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_cee9f386670e6cc4a9ff06e8f1c450d656d8d3ea0b981ea52ebdc31ead0bf71c",
                                "typeString": "literal_string \"PROMISE_ALREADY_EXISTS\""
                              },
                              "value": "PROMISE_ALREADY_EXISTS"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_cee9f386670e6cc4a9ff06e8f1c450d656d8d3ea0b981ea52ebdc31ead0bf71c",
                                "typeString": "literal_string \"PROMISE_ALREADY_EXISTS\""
                              }
                            ],
                            "id": 6774,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9783:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9783:121:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6785,
                        "nodeType": "ExpressionStatement",
                        "src": "9783:121:6"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 6805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 6788,
                        "name": "promises",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6444,
                        "src": "9928:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                          "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                        }
                      },
                      "id": 6790,
                      "indexExpression": {
                        "id": 6789,
                        "name": "key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6754,
                        "src": "9937:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9928:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_storage",
                        "typeString": "struct VoucherKernel.Promise storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 6792,
                          "name": "key",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6754,
                          "src": "9978:3:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "baseExpression": {
                            "id": 6793,
                            "name": "tokenNonces",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6448,
                            "src": "10003:11:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 6795,
                          "indexExpression": {
                            "id": 6794,
                            "name": "_seller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6716,
                            "src": "10015:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10003:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 6796,
                          "name": "_seller",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6716,
                          "src": "10046:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 6797,
                          "name": "_validFrom",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6718,
                          "src": "10079:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 6798,
                          "name": "_validTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6720,
                          "src": "10113:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 6799,
                          "name": "_price",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6722,
                          "src": "10143:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 6800,
                          "name": "_depositSe",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6724,
                          "src": "10175:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 6801,
                          "name": "_depositBu",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6726,
                          "src": "10211:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 6802,
                            "name": "promiseKeys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6455,
                            "src": "10241:11:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                              "typeString": "bytes32[] storage ref"
                            }
                          },
                          "id": 6803,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "10241:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 6791,
                        "name": "Promise",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6429,
                        "src": "9944:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Promise_$6429_storage_ptr_$",
                          "typeString": "type(struct VoucherKernel.Promise storage pointer)"
                        }
                      },
                      "id": 6804,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "promiseId",
                        "nonce",
                        "seller",
                        "validFrom",
                        "validTo",
                        "price",
                        "depositSe",
                        "depositBu",
                        "idx"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "9944:327:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                        "typeString": "struct VoucherKernel.Promise memory"
                      }
                    },
                    "src": "9928:343:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                      "typeString": "struct VoucherKernel.Promise storage ref"
                    }
                  },
                  "id": 6806,
                  "nodeType": "ExpressionStatement",
                  "src": "9928:343:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6810,
                        "name": "key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6754,
                        "src": "10301:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 6807,
                        "name": "promiseKeys",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6455,
                        "src": "10284:11:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 6809,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "src": "10284:16:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32)"
                      }
                    },
                    "id": 6811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10284:21:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6812,
                  "nodeType": "ExpressionStatement",
                  "src": "10284:21:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 6814,
                        "name": "key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6754,
                        "src": "10355:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "baseExpression": {
                          "id": 6815,
                          "name": "tokenNonces",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6448,
                          "src": "10373:11:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 6817,
                        "indexExpression": {
                          "id": 6816,
                          "name": "_seller",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6716,
                          "src": "10385:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10373:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 6818,
                        "name": "_seller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6716,
                        "src": "10408:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6819,
                        "name": "_validFrom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6718,
                        "src": "10430:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 6820,
                        "name": "_validTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6720,
                        "src": "10455:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 6821,
                            "name": "promiseKeys",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6455,
                            "src": "10478:11:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                              "typeString": "bytes32[] storage ref"
                            }
                          },
                          "id": 6822,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "10478:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 6823,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10499:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "10478:22:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6813,
                      "name": "LogPromiseCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6523,
                      "src": "10323:17:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 6825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10323:188:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6826,
                  "nodeType": "EmitStatement",
                  "src": "10318:193:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6828,
                        "name": "_seller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6716,
                        "src": "10543:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6829,
                        "name": "key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6754,
                        "src": "10552:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 6830,
                        "name": "_quantity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6728,
                        "src": "10557:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6827,
                      "name": "createOrder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6924,
                      "src": "10531:11:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes32_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,bytes32,uint256) returns (uint256)"
                      }
                    },
                    "id": 6831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10531:36:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6735,
                  "id": 6832,
                  "nodeType": "Return",
                  "src": "10524:43:6"
                }
              ]
            },
            "documentation": {
              "id": 6714,
              "nodeType": "StructuredDocumentation",
              "src": "8393:445:6",
              "text": " @notice Creating a new promise for goods or services.\n Can be reused, e.g. for making different batches of these (in the future).\n @param _seller      seller of the promise\n @param _validFrom   Start of valid period\n @param _validTo     End of valid period\n @param _price       Price (payment amount)\n @param _depositSe   Seller's deposit\n @param _depositBu   Buyer's deposit"
            },
            "functionSelector": "797f2a26",
            "id": 6834,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 6732,
                "modifierName": {
                  "id": 6731,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "9091:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9091:14:6"
              }
            ],
            "name": "createTokenSupplyID",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 6730,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9082:8:6"
            },
            "parameters": {
              "id": 6729,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6716,
                  "mutability": "mutable",
                  "name": "_seller",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "8883:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6715,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8883:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6718,
                  "mutability": "mutable",
                  "name": "_validFrom",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "8909:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6717,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8909:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6720,
                  "mutability": "mutable",
                  "name": "_validTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "8938:16:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6719,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8938:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6722,
                  "mutability": "mutable",
                  "name": "_price",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "8965:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6721,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8965:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6724,
                  "mutability": "mutable",
                  "name": "_depositSe",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "8990:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6723,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8990:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6726,
                  "mutability": "mutable",
                  "name": "_depositBu",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "9019:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6725,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9019:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6728,
                  "mutability": "mutable",
                  "name": "_quantity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "9048:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6727,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9048:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8872:200:6"
            },
            "returnParameters": {
              "id": 6735,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6734,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6834,
                  "src": "9115:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6733,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9115:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9114:9:6"
            },
            "scope": 8535,
            "src": "8844:1731:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9341
            ],
            "body": {
              "id": 6859,
              "nodeType": "Block",
              "src": "11313:225:6",
              "statements": [
                {
                  "expression": {
                    "id": 6857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 6849,
                        "name": "paymentDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6452,
                        "src": "11324:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherPaymentMethod_$6436_storage_$",
                          "typeString": "mapping(uint256 => struct VoucherKernel.VoucherPaymentMethod storage ref)"
                        }
                      },
                      "id": 6851,
                      "indexExpression": {
                        "id": 6850,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6837,
                        "src": "11339:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11324:30:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VoucherPaymentMethod_$6436_storage",
                        "typeString": "struct VoucherKernel.VoucherPaymentMethod storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 6853,
                          "name": "_paymentMethod",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6839,
                          "src": "11408:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 6854,
                          "name": "_tokenPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6841,
                          "src": "11456:11:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 6855,
                          "name": "_tokenDeposits",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6843,
                          "src": "11504:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 6852,
                        "name": "VoucherPaymentMethod",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6436,
                        "src": "11357:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_VoucherPaymentMethod_$6436_storage_ptr_$",
                          "typeString": "type(struct VoucherKernel.VoucherPaymentMethod storage pointer)"
                        }
                      },
                      "id": 6856,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "paymentMethod",
                        "addressTokenPrice",
                        "addressTokenDeposits"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "11357:173:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VoucherPaymentMethod_$6436_memory_ptr",
                        "typeString": "struct VoucherKernel.VoucherPaymentMethod memory"
                      }
                    },
                    "src": "11324:206:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_VoucherPaymentMethod_$6436_storage",
                      "typeString": "struct VoucherKernel.VoucherPaymentMethod storage ref"
                    }
                  },
                  "id": 6858,
                  "nodeType": "ExpressionStatement",
                  "src": "11324:206:6"
                }
              ]
            },
            "documentation": {
              "id": 6835,
              "nodeType": "StructuredDocumentation",
              "src": "10583:528:6",
              "text": " @notice Creates a Payment method struct recording the details on how the seller requires to receive Price and Deposits for a certain Voucher Set.\n @param _tokenIdSupply     _tokenIdSupply of the voucher set this is related to\n @param _paymentMethod  might be ETHETH, ETHTKN, TKNETH or TKNTKN\n @param _tokenPrice   token address which will hold the funds for the price of the voucher\n @param _tokenDeposits   token address which will hold the funds for the deposits of the voucher"
            },
            "functionSelector": "cf5c9008",
            "id": 6860,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 6847,
                "modifierName": {
                  "id": 6846,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "11298:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11298:14:6"
              }
            ],
            "name": "createPaymentMethod",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 6845,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11289:8:6"
            },
            "parameters": {
              "id": 6844,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6837,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 6860,
                  "src": "11156:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6836,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11156:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6839,
                  "mutability": "mutable",
                  "name": "_paymentMethod",
                  "nodeType": "VariableDeclaration",
                  "scope": 6860,
                  "src": "11189:20:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 6838,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "11189:5:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6841,
                  "mutability": "mutable",
                  "name": "_tokenPrice",
                  "nodeType": "VariableDeclaration",
                  "scope": 6860,
                  "src": "11220:19:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6840,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11220:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6843,
                  "mutability": "mutable",
                  "name": "_tokenDeposits",
                  "nodeType": "VariableDeclaration",
                  "scope": 6860,
                  "src": "11250:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6842,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11250:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11145:134:6"
            },
            "returnParameters": {
              "id": 6848,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11313:0:6"
            },
            "scope": 8535,
            "src": "11117:421:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 6923,
              "nodeType": "Block",
              "src": "12065:801:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 6878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6873,
                          "name": "_promiseId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6865,
                          "src": "12084:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 6876,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12106:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6875,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12098:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 6874,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "12098:7:6",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6877,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12098:10:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "12084:24:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f50524f4d495345",
                        "id": 6879,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12110:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_792c2e9142854c982cac942d65b00dc6d3f3d4eff10c18677f7c86d71c7d70f7",
                          "typeString": "literal_string \"UNSPECIFIED_PROMISE\""
                        },
                        "value": "UNSPECIFIED_PROMISE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_792c2e9142854c982cac942d65b00dc6d3f3d4eff10c18677f7c86d71c7d70f7",
                          "typeString": "literal_string \"UNSPECIFIED_PROMISE\""
                        }
                      ],
                      "id": 6872,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12076:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12076:56:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6881,
                  "nodeType": "ExpressionStatement",
                  "src": "12076:56:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6888,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "baseExpression": {
                              "id": 6883,
                              "name": "promises",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6444,
                              "src": "12241:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                                "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                              }
                            },
                            "id": 6885,
                            "indexExpression": {
                              "id": 6884,
                              "name": "_promiseId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6865,
                              "src": "12250:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12241:20:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Promise_$6429_storage",
                              "typeString": "struct VoucherKernel.Promise storage ref"
                            }
                          },
                          "id": 6886,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "seller",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6416,
                          "src": "12241:27:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 6887,
                          "name": "_seller",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6863,
                          "src": "12272:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "12241:38:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f434f",
                        "id": 6889,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12281:17:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_83c466e73df30fcb242d5e5dc7f8c37ecc275ffbfc628bb629cb0683570329da",
                          "typeString": "literal_string \"UNAUTHORIZED_CO\""
                        },
                        "value": "UNAUTHORIZED_CO"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_83c466e73df30fcb242d5e5dc7f8c37ecc275ffbfc628bb629cb0683570329da",
                          "typeString": "literal_string \"UNAUTHORIZED_CO\""
                        }
                      ],
                      "id": 6882,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12233:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12233:66:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6891,
                  "nodeType": "ExpressionStatement",
                  "src": "12233:66:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6895,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6893,
                          "name": "_quantity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6867,
                          "src": "12402:9:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 6894,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12414:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "12402:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f5155414e54495459",
                        "id": 6896,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12417:18:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e31c51dc6189444539a626c6dbd620d14aa64460972eca65d71d9401768af7ef",
                          "typeString": "literal_string \"INVALID_QUANTITY\""
                        },
                        "value": "INVALID_QUANTITY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e31c51dc6189444539a626c6dbd620d14aa64460972eca65d71d9401768af7ef",
                          "typeString": "literal_string \"INVALID_QUANTITY\""
                        }
                      ],
                      "id": 6892,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12394:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12394:42:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6898,
                  "nodeType": "ExpressionStatement",
                  "src": "12394:42:6"
                },
                {
                  "assignments": [
                    6900
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6900,
                      "mutability": "mutable",
                      "name": "tokenIdSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 6923,
                      "src": "12532:21:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6899,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12532:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 6904,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "74727565",
                        "id": 6902,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12574:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 6901,
                      "name": "generateTokenType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7189,
                      "src": "12556:17:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$_t_uint256_$",
                        "typeString": "function (bool) returns (uint256)"
                      }
                    },
                    "id": 6903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12556:23:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12532:47:6"
                },
                {
                  "expression": {
                    "id": 6909,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 6905,
                        "name": "ordersPromise",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6459,
                        "src": "12634:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                          "typeString": "mapping(uint256 => bytes32)"
                        }
                      },
                      "id": 6907,
                      "indexExpression": {
                        "id": 6906,
                        "name": "tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6900,
                        "src": "12648:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "12634:28:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 6908,
                      "name": "_promiseId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6865,
                      "src": "12665:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "12634:41:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 6910,
                  "nodeType": "ExpressionStatement",
                  "src": "12634:41:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6915,
                        "name": "_seller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6863,
                        "src": "12738:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6916,
                        "name": "tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6900,
                        "src": "12760:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 6917,
                        "name": "_quantity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6867,
                        "src": "12788:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 6918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12812:2:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 6912,
                            "name": "tokensContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6410,
                            "src": "12703:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 6911,
                          "name": "IERC1155ERC721",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8975,
                          "src": "12688:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC1155ERC721_$8975_$",
                            "typeString": "type(contract IERC1155ERC721)"
                          }
                        },
                        "id": 6913,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12688:30:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1155ERC721_$8975",
                          "typeString": "contract IERC1155ERC721"
                        }
                      },
                      "id": 6914,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8945,
                      "src": "12688:35:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint256,bytes memory) external"
                      }
                    },
                    "id": 6919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12688:137:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6920,
                  "nodeType": "ExpressionStatement",
                  "src": "12688:137:6"
                },
                {
                  "expression": {
                    "id": 6921,
                    "name": "tokenIdSupply",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6900,
                    "src": "12845:13:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 6871,
                  "id": 6922,
                  "nodeType": "Return",
                  "src": "12838:20:6"
                }
              ]
            },
            "documentation": {
              "id": 6861,
              "nodeType": "StructuredDocumentation",
              "src": "11546:376:6",
              "text": " @notice Create an order for offering a certain quantity of an asset\n This creates a listing in a marketplace, technically as an ERC-1155 non-fungible token with supply.\n @param _seller     seller of the promise\n @param _promiseId  ID of a promise (simplified into asset for demo)\n @param _quantity   Quantity of assets on offer"
            },
            "id": 6924,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createOrder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6868,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6863,
                  "mutability": "mutable",
                  "name": "_seller",
                  "nodeType": "VariableDeclaration",
                  "scope": 6924,
                  "src": "11959:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6862,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11959:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6865,
                  "mutability": "mutable",
                  "name": "_promiseId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6924,
                  "src": "11985:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6864,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11985:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6867,
                  "mutability": "mutable",
                  "name": "_quantity",
                  "nodeType": "VariableDeclaration",
                  "scope": 6924,
                  "src": "12014:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6866,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12014:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11948:90:6"
            },
            "returnParameters": {
              "id": 6871,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6870,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6924,
                  "src": "12056:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6869,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12056:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12055:9:6"
            },
            "scope": 8535,
            "src": "11928:938:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              9417
            ],
            "body": {
              "id": 6964,
              "nodeType": "Block",
              "src": "13491:429:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6940,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6927,
                        "src": "13539:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 6941,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6929,
                        "src": "13555:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6942,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6931,
                        "src": "13564:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6939,
                      "name": "checkOrderFillable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7038,
                      "src": "13520:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address,address) view"
                      }
                    },
                    "id": 6943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13520:52:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6944,
                  "nodeType": "ExpressionStatement",
                  "src": "13520:52:6"
                },
                {
                  "assignments": [
                    6946
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6946,
                      "mutability": "mutable",
                      "name": "voucherTokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 6964,
                      "src": "13608:22:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 6945,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13608:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 6952,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 6948,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6929,
                        "src": "13644:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6949,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6931,
                        "src": "13653:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6950,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6927,
                        "src": "13662:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6947,
                      "name": "extract721",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7131,
                      "src": "13633:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) returns (uint256)"
                      }
                    },
                    "id": 6951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13633:44:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13608:69:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 6954,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6927,
                        "src": "13729:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 6955,
                        "name": "voucherTokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6946,
                        "src": "13758:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 6956,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6929,
                        "src": "13787:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6957,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6931,
                        "src": "13809:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 6959,
                            "name": "voucherTokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6946,
                            "src": "13857:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 6958,
                          "name": "getPromiseIdFromVoucherId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8260,
                          "src": "13831:25:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                            "typeString": "function (uint256) view returns (bytes32)"
                          }
                        },
                        "id": 6960,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13831:41:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 6961,
                        "name": "_correlationId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6933,
                        "src": "13887:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6953,
                      "name": "LogVoucherDelivered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6537,
                      "src": "13695:19:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,address,address,bytes32,uint256)"
                      }
                    },
                    "id": 6962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13695:217:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6963,
                  "nodeType": "EmitStatement",
                  "src": "13690:222:6"
                }
              ]
            },
            "documentation": {
              "id": 6925,
              "nodeType": "StructuredDocumentation",
              "src": "12874:434:6",
              "text": " @notice Fill Voucher Order, iff funds paid, then extract & mint NFT to the voucher holder\n @param _tokenIdSupply   ID of the supply token (ERC-1155)\n @param _issuer          Address of the token's issuer\n @param _holder          Address of the recipient of the voucher (ERC-721)\n @param _correlationId           ID of the current interaction with the smart contract for a specific user"
            },
            "functionSelector": "590f6f68",
            "id": 6965,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 6937,
                "modifierName": {
                  "id": 6936,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "13476:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13476:14:6"
              }
            ],
            "name": "fillOrder",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 6935,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13467:8:6"
            },
            "parameters": {
              "id": 6934,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6927,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 6965,
                  "src": "13343:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6926,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13343:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6929,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nodeType": "VariableDeclaration",
                  "scope": 6965,
                  "src": "13376:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6928,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13376:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6931,
                  "mutability": "mutable",
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 6965,
                  "src": "13402:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6930,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13402:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6933,
                  "mutability": "mutable",
                  "name": "_correlationId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6965,
                  "src": "13428:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6932,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13428:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13332:125:6"
            },
            "returnParameters": {
              "id": 6938,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13491:0:6"
            },
            "scope": 8535,
            "src": "13314:606:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7037,
              "nodeType": "Block",
              "src": "14347:1008:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 6978,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6976,
                          "name": "_tokenIdSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6968,
                          "src": "14366:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 6977,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14384:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14366:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4944",
                        "id": 6979,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14387:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        },
                        "value": "UNSPECIFIED_ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        }
                      ],
                      "id": 6975,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14358:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14358:46:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6981,
                  "nodeType": "ExpressionStatement",
                  "src": "14358:46:6"
                },
                {
                  "condition": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 6982,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6972,
                        "src": "14511:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 6983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isContract",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11160,
                      "src": "14511:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 6984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14511:20:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6996,
                  "nodeType": "IfStatement",
                  "src": "14507:282:6",
                  "trueBody": {
                    "id": 6995,
                    "nodeType": "Block",
                    "src": "14533:256:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30783135306237613032",
                                  "id": 6990,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "14609:10:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_353073666_by_1",
                                    "typeString": "int_const 353073666"
                                  },
                                  "value": "0x150b7a02"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_353073666_by_1",
                                    "typeString": "int_const 353073666"
                                  }
                                ],
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 6987,
                                      "name": "_holder",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6972,
                                      "src": "14582:7:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 6986,
                                    "name": "IERC165",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9025,
                                    "src": "14574:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC165_$9025_$",
                                      "typeString": "type(contract IERC165)"
                                    }
                                  },
                                  "id": 6988,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14574:16:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC165_$9025",
                                    "typeString": "contract IERC165"
                                  }
                                },
                                "id": 6989,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "supportsInterface",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9024,
                                "src": "14574:34:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_bytes4_$returns$_t_bool_$",
                                  "typeString": "function (bytes4) view external returns (bool)"
                                }
                              },
                              "id": 6991,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14574:46:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "554e535550504f525445445f4552433732315f5245434549564544",
                              "id": 6992,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14639:29:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_93f4b73c3d86bd67195020f99055e3655658f7a9ebf8672f2b1df47f80c21821",
                                "typeString": "literal_string \"UNSUPPORTED_ERC721_RECEIVED\""
                              },
                              "value": "UNSUPPORTED_ERC721_RECEIVED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_93f4b73c3d86bd67195020f99055e3655658f7a9ebf8672f2b1df47f80c21821",
                                "typeString": "literal_string \"UNSUPPORTED_ERC721_RECEIVED\""
                              }
                            ],
                            "id": 6985,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "14548:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6993,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14548:135:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6994,
                        "nodeType": "ExpressionStatement",
                        "src": "14548:135:6"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7003,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6998,
                          "name": "_holder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6972,
                          "src": "14809:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 7001,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14828:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 7000,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14820:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 6999,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "14820:7:6",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 7002,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14820:10:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "14809:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 7004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14832:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 6997,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14801:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7005,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14801:53:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7006,
                  "nodeType": "ExpressionStatement",
                  "src": "14801:53:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7016,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 7012,
                              "name": "_issuer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6970,
                              "src": "15012:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7013,
                              "name": "_tokenIdSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6968,
                              "src": "15021:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7009,
                                  "name": "tokensContract",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6410,
                                  "src": "14986:14:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7008,
                                "name": "IERC1155",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8931,
                                "src": "14977:8:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC1155_$8931_$",
                                  "typeString": "type(contract IERC1155)"
                                }
                              },
                              "id": 7010,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14977:24:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC1155_$8931",
                                "typeString": "contract IERC1155"
                              }
                            },
                            "id": 7011,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8899,
                            "src": "14977:34:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,uint256) view external returns (uint256)"
                            }
                          },
                          "id": 7014,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14977:59:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 7015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15039:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14977:63:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f464645525f454d505459",
                        "id": 7017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15055:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6876f935fab011de6b034451c60bbcc0620e40b8eebb55c78ca705d7896ccee0",
                          "typeString": "literal_string \"OFFER_EMPTY\""
                        },
                        "value": "OFFER_EMPTY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6876f935fab011de6b034451c60bbcc0620e40b8eebb55c78ca705d7896ccee0",
                          "typeString": "literal_string \"OFFER_EMPTY\""
                        }
                      ],
                      "id": 7007,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14955:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7018,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14955:124:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7019,
                  "nodeType": "ExpressionStatement",
                  "src": "14955:124:6"
                },
                {
                  "assignments": [
                    7021
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7021,
                      "mutability": "mutable",
                      "name": "promiseKey",
                      "nodeType": "VariableDeclaration",
                      "scope": 7037,
                      "src": "15174:18:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 7020,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "15174:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7025,
                  "initialValue": {
                    "baseExpression": {
                      "id": 7022,
                      "name": "ordersPromise",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6459,
                      "src": "15195:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                        "typeString": "mapping(uint256 => bytes32)"
                      }
                    },
                    "id": 7024,
                    "indexExpression": {
                      "id": 7023,
                      "name": "_tokenIdSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6968,
                      "src": "15209:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "15195:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15174:50:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7033,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "baseExpression": {
                              "id": 7027,
                              "name": "promises",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6444,
                              "src": "15259:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                                "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                              }
                            },
                            "id": 7029,
                            "indexExpression": {
                              "id": 7028,
                              "name": "promiseKey",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7021,
                              "src": "15268:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "15259:20:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Promise_$6429_storage",
                              "typeString": "struct VoucherKernel.Promise storage ref"
                            }
                          },
                          "id": 7030,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "validTo",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6420,
                          "src": "15259:28:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "expression": {
                            "id": 7031,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "15291:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 7032,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "15291:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15259:47:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f464645525f45585049524544",
                        "id": 7034,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15321:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a74befa6e5e88163dcfc9f9aa11dec8458181ebc8f44064ec59ad9b923770678",
                          "typeString": "literal_string \"OFFER_EXPIRED\""
                        },
                        "value": "OFFER_EXPIRED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a74befa6e5e88163dcfc9f9aa11dec8458181ebc8f44064ec59ad9b923770678",
                          "typeString": "literal_string \"OFFER_EXPIRED\""
                        }
                      ],
                      "id": 7026,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15237:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15237:110:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7036,
                  "nodeType": "ExpressionStatement",
                  "src": "15237:110:6"
                }
              ]
            },
            "documentation": {
              "id": 6966,
              "nodeType": "StructuredDocumentation",
              "src": "13928:279:6",
              "text": " @notice Check order is fillable\n @dev Will throw if checks don't pass\n @param _tokenIdSupply  ID of the supply token\n @param _issuer  Address of the token's issuer\n @param _holder  Address of the recipient of the voucher (ERC-721)"
            },
            "id": 7038,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkOrderFillable",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6968,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7038,
                  "src": "14251:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6967,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14251:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6970,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nodeType": "VariableDeclaration",
                  "scope": 7038,
                  "src": "14284:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6969,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14284:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6972,
                  "mutability": "mutable",
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 7038,
                  "src": "14310:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6971,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14310:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14240:92:6"
            },
            "returnParameters": {
              "id": 6974,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14347:0:6"
            },
            "scope": 8535,
            "src": "14213:1142:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7130,
              "nodeType": "Block",
              "src": "15941:1252:6",
              "statements": [
                {
                  "condition": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 7050,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7043,
                        "src": "15956:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 7051,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isContract",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11160,
                      "src": "15956:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 7052,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15956:16:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7074,
                  "nodeType": "IfStatement",
                  "src": "15952:545:6",
                  "trueBody": {
                    "id": 7073,
                    "nodeType": "Block",
                    "src": "15974:523:6",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 7069,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 7058,
                                    "name": "_issuer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7041,
                                    "src": "16079:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 7059,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "16109:3:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 7060,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "16109:10:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "id": 7061,
                                    "name": "_tokenIdSupply",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7045,
                                    "src": "16142:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "hexValue": "",
                                    "id": 7062,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16179:2:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    },
                                    "value": ""
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 7055,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7043,
                                        "src": "16035:3:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 7054,
                                      "name": "ERC721TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9268,
                                      "src": "16015:19:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$9268_$",
                                        "typeString": "type(contract ERC721TokenReceiver)"
                                      }
                                    },
                                    "id": 7056,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "16015:24:6",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC721TokenReceiver_$9268",
                                      "typeString": "contract ERC721TokenReceiver"
                                    }
                                  },
                                  "id": 7057,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC721Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9267,
                                  "src": "16015:41:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 7063,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16015:185:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 7065,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7043,
                                        "src": "16224:3:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 7064,
                                      "name": "ERC721TokenReceiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9268,
                                      "src": "16204:19:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ERC721TokenReceiver_$9268_$",
                                        "typeString": "type(contract ERC721TokenReceiver)"
                                      }
                                    },
                                    "id": 7066,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "16204:24:6",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC721TokenReceiver_$9268",
                                      "typeString": "contract ERC721TokenReceiver"
                                    }
                                  },
                                  "id": 7067,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "onERC721Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9267,
                                  "src": "16204:41:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 7068,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "selector",
                                "nodeType": "MemberAccess",
                                "src": "16204:50:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "16015:239:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "554e535550504f525445445f4552433732315f5245434549564544",
                              "id": 7070,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16273:29:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_93f4b73c3d86bd67195020f99055e3655658f7a9ebf8672f2b1df47f80c21821",
                                "typeString": "literal_string \"UNSUPPORTED_ERC721_RECEIVED\""
                              },
                              "value": "UNSUPPORTED_ERC721_RECEIVED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_93f4b73c3d86bd67195020f99055e3655658f7a9ebf8672f2b1df47f80c21821",
                                "typeString": "literal_string \"UNSUPPORTED_ERC721_RECEIVED\""
                              }
                            ],
                            "id": 7053,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "15989:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7071,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15989:328:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7072,
                        "nodeType": "ExpressionStatement",
                        "src": "15989:328:6"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7079,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7041,
                        "src": "16545:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 7080,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7045,
                        "src": "16554:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "31",
                        "id": 7081,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16570:1:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 7076,
                            "name": "tokensContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6410,
                            "src": "16524:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7075,
                          "name": "IERC1155ERC721",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8975,
                          "src": "16509:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC1155ERC721_$8975_$",
                            "typeString": "type(contract IERC1155ERC721)"
                          }
                        },
                        "id": 7077,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16509:30:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1155ERC721_$8975",
                          "typeString": "contract IERC1155ERC721"
                        }
                      },
                      "id": 7078,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8955,
                      "src": "16509:35:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256) external"
                      }
                    },
                    "id": 7082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16509:63:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7083,
                  "nodeType": "ExpressionStatement",
                  "src": "16509:63:6"
                },
                {
                  "assignments": [
                    7085
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7085,
                      "mutability": "mutable",
                      "name": "voucherTokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 7130,
                      "src": "16651:22:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7084,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16651:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7092,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 7086,
                      "name": "_tokenIdSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7045,
                      "src": "16689:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "|",
                    "rightExpression": {
                      "id": 7090,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "16706:30:6",
                      "subExpression": {
                        "baseExpression": {
                          "id": 7087,
                          "name": "typeCounters",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6479,
                          "src": "16708:12:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 7089,
                        "indexExpression": {
                          "id": 7088,
                          "name": "_tokenIdSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7045,
                          "src": "16721:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "IndexAccess",
                        "src": "16708:28:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16689:47:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16651:85:6"
                },
                {
                  "expression": {
                    "id": 7104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7093,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "16771:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7095,
                        "indexExpression": {
                          "id": 7094,
                          "name": "voucherTokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7085,
                          "src": "16786:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16771:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7096,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6259,
                      "src": "16771:37:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 7098,
                              "name": "vouchersStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6463,
                              "src": "16835:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                              }
                            },
                            "id": 7100,
                            "indexExpression": {
                              "id": 7099,
                              "name": "voucherTokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7085,
                              "src": "16850:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "16835:30:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                            }
                          },
                          "id": 7101,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6259,
                          "src": "16835:37:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 7102,
                          "name": "IDX_COMMIT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6196,
                          "src": "16887:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7097,
                        "name": "setChange",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6379,
                        "src": "16811:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                          "typeString": "function (uint8,uint8) pure returns (uint8)"
                        }
                      },
                      "id": 7103,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16811:97:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "16771:137:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 7105,
                  "nodeType": "ExpressionStatement",
                  "src": "16771:137:6"
                },
                {
                  "expression": {
                    "id": 7111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7106,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "16919:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7108,
                        "indexExpression": {
                          "id": 7107,
                          "name": "voucherTokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7085,
                          "src": "16934:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16919:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7109,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isPaymentReleased",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6261,
                      "src": "16919:48:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "66616c7365",
                      "id": 7110,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16970:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "16919:56:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7112,
                  "nodeType": "ExpressionStatement",
                  "src": "16919:56:6"
                },
                {
                  "expression": {
                    "id": 7118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7113,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "16986:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7115,
                        "indexExpression": {
                          "id": 7114,
                          "name": "voucherTokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7085,
                          "src": "17001:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16986:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7116,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isDepositsReleased",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6263,
                      "src": "16986:49:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "66616c7365",
                      "id": 7117,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17038:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "16986:57:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7119,
                  "nodeType": "ExpressionStatement",
                  "src": "16986:57:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7124,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7043,
                        "src": "17131:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 7125,
                        "name": "voucherTokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7085,
                        "src": "17136:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 7121,
                            "name": "tokensContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6410,
                            "src": "17110:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7120,
                          "name": "IERC1155ERC721",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8975,
                          "src": "17095:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC1155ERC721_$8975_$",
                            "typeString": "type(contract IERC1155ERC721)"
                          }
                        },
                        "id": 7122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17095:30:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1155ERC721_$8975",
                          "typeString": "contract IERC1155ERC721"
                        }
                      },
                      "id": 7123,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8965,
                      "src": "17095:35:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 7126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17095:56:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7127,
                  "nodeType": "ExpressionStatement",
                  "src": "17095:56:6"
                },
                {
                  "expression": {
                    "id": 7128,
                    "name": "voucherTokenId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7085,
                    "src": "17171:14:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7049,
                  "id": 7129,
                  "nodeType": "Return",
                  "src": "17164:21:6"
                }
              ]
            },
            "documentation": {
              "id": 7039,
              "nodeType": "StructuredDocumentation",
              "src": "15363:437:6",
              "text": " @notice Extract a standard non-fungible token ERC-721 from a supply stored in ERC-1155\n @dev Token ID is derived following the same principles for both ERC-1155 and ERC-721\n @param _issuer          The address of the token issuer\n @param _to              The address of the token holder\n @param _tokenIdSupply   ID of the token type\n @return                 ID of the voucher token"
            },
            "id": 7131,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "extract721",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7046,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7041,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nodeType": "VariableDeclaration",
                  "scope": 7131,
                  "src": "15836:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7040,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15836:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7043,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 7131,
                  "src": "15862:11:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7042,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15862:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7045,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7131,
                  "src": "15884:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7044,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15884:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15825:88:6"
            },
            "returnParameters": {
              "id": 7049,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7048,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7131,
                  "src": "15932:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7047,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15932:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15931:9:6"
            },
            "scope": 8535,
            "src": "15806:1387:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              9363
            ],
            "body": {
              "id": 7155,
              "nodeType": "Block",
              "src": "17734:85:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7150,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7134,
                        "src": "17781:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 7151,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7136,
                        "src": "17790:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 7152,
                        "name": "_qty",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7138,
                        "src": "17806:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 7147,
                            "name": "tokensContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6410,
                            "src": "17760:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7146,
                          "name": "IERC1155ERC721",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8975,
                          "src": "17745:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC1155ERC721_$8975_$",
                            "typeString": "type(contract IERC1155ERC721)"
                          }
                        },
                        "id": 7148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17745:30:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1155ERC721_$8975",
                          "typeString": "contract IERC1155ERC721"
                        }
                      },
                      "id": 7149,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8955,
                      "src": "17745:35:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256) external"
                      }
                    },
                    "id": 7153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17745:66:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7154,
                  "nodeType": "ExpressionStatement",
                  "src": "17745:66:6"
                }
              ]
            },
            "documentation": {
              "id": 7132,
              "nodeType": "StructuredDocumentation",
              "src": "17201:366:6",
              "text": " @notice Extract a standard non-fungible tokens ERC-721 from a supply stored in ERC-1155\n @dev Token ID is derived following the same principles for both ERC-1155 and ERC-721\n @param _issuer          The address of the token issuer\n @param _tokenIdSupply   ID of the token type\n @param _qty   qty that should be burned"
            },
            "functionSelector": "74898e82",
            "id": 7156,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7142,
                "modifierName": {
                  "id": 7141,
                  "name": "whenPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 12010,
                  "src": "17707:10:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17707:10:6"
              },
              {
                "id": 7144,
                "modifierName": {
                  "id": 7143,
                  "name": "onlyFromCashier",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6649,
                  "src": "17718:15:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17718:15:6"
              }
            ],
            "name": "burnSupplyOnPause",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7140,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17698:8:6"
            },
            "parameters": {
              "id": 7139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7134,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nodeType": "VariableDeclaration",
                  "scope": 7156,
                  "src": "17610:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7133,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17610:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7136,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7156,
                  "src": "17636:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7135,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17636:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7138,
                  "mutability": "mutable",
                  "name": "_qty",
                  "nodeType": "VariableDeclaration",
                  "scope": 7156,
                  "src": "17669:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7137,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17669:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17599:89:6"
            },
            "returnParameters": {
              "id": 7145,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17734:0:6"
            },
            "scope": 8535,
            "src": "17573:246:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 7188,
              "nodeType": "Block",
              "src": "18205:359:6",
              "statements": [
                {
                  "expression": {
                    "id": 7165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "18216:8:6",
                    "subExpression": {
                      "id": 7164,
                      "name": "typeId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6505,
                      "src": "18216:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7166,
                  "nodeType": "ExpressionStatement",
                  "src": "18216:8:6"
                },
                {
                  "condition": {
                    "id": 7167,
                    "name": "_isNonFungible",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7159,
                    "src": "18241:14:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 7184,
                    "nodeType": "Block",
                    "src": "18400:127:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 7182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7178,
                            "name": "_tokenType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7162,
                            "src": "18415:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7181,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 7179,
                              "name": "typeId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6505,
                              "src": "18428:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "313238",
                              "id": 7180,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18438:3:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_128_by_1",
                                "typeString": "int_const 128"
                              },
                              "value": "128"
                            },
                            "src": "18428:13:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18415:26:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7183,
                        "nodeType": "ExpressionStatement",
                        "src": "18415:26:6"
                      }
                    ]
                  },
                  "id": 7185,
                  "nodeType": "IfStatement",
                  "src": "18237:290:6",
                  "trueBody": {
                    "id": 7177,
                    "nodeType": "Block",
                    "src": "18257:137:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 7175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7168,
                            "name": "_tokenType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7162,
                            "src": "18272:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7174,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 7169,
                              "name": "TYPE_NF_BIT",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6503,
                              "src": "18285:11:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "|",
                            "rightExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7172,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 7170,
                                    "name": "typeId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6505,
                                    "src": "18300:6:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "hexValue": "313238",
                                    "id": 7171,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "18310:3:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_128_by_1",
                                      "typeString": "int_const 128"
                                    },
                                    "value": "128"
                                  },
                                  "src": "18300:13:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 7173,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "18299:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "18285:29:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18272:42:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7176,
                        "nodeType": "ExpressionStatement",
                        "src": "18272:42:6"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 7186,
                    "name": "_tokenType",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7162,
                    "src": "18546:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7163,
                  "id": 7187,
                  "nodeType": "Return",
                  "src": "18539:17:6"
                }
              ]
            },
            "documentation": {
              "id": 7157,
              "nodeType": "StructuredDocumentation",
              "src": "17827:263:6",
              "text": " @notice Creating a new token type, serving as the base for tokenID generation for NFTs, and a de facto ID for FTs.\n @param _isNonFungible   Flag for generating NFT or FT\n @return _tokenType   Returns a newly generated token type"
            },
            "id": 7189,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "generateTokenType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 7160,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7159,
                  "mutability": "mutable",
                  "name": "_isNonFungible",
                  "nodeType": "VariableDeclaration",
                  "scope": 7189,
                  "src": "18123:19:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7158,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18123:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18122:21:6"
            },
            "returnParameters": {
              "id": 7163,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7162,
                  "mutability": "mutable",
                  "name": "_tokenType",
                  "nodeType": "VariableDeclaration",
                  "scope": 7189,
                  "src": "18180:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7161,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18180:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18179:20:6"
            },
            "scope": 8535,
            "src": "18096:468:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              9371
            ],
            "body": {
              "id": 7256,
              "nodeType": "Block",
              "src": "18996:798:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "baseExpression": {
                                "id": 7208,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "19070:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 7210,
                              "indexExpression": {
                                "id": 7209,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7192,
                                "src": "19085:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "19070:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 7211,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "status",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6259,
                            "src": "19070:38:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 7207,
                          "name": "isStateCommitted",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6284,
                          "src": "19053:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                            "typeString": "function (uint8) pure returns (bool)"
                          }
                        },
                        "id": 7212,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19053:56:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f50524f434553534544",
                        "id": 7213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19124:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_85aa68df5043b4881d3b6873b2ac0da9afd51462b965ad79d44d506b45049ebd",
                          "typeString": "literal_string \"ALREADY_PROCESSED\""
                        },
                        "value": "ALREADY_PROCESSED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_85aa68df5043b4881d3b6873b2ac0da9afd51462b965ad79d44d506b45049ebd",
                          "typeString": "literal_string \"ALREADY_PROCESSED\""
                        }
                      ],
                      "id": 7206,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "19031:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19031:123:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7215,
                  "nodeType": "ExpressionStatement",
                  "src": "19031:123:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7217,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7192,
                        "src": "19301:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7216,
                      "name": "isInValidityPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8512,
                      "src": "19282:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) view returns (bool)"
                      }
                    },
                    "id": 7218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19282:35:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7219,
                  "nodeType": "ExpressionStatement",
                  "src": "19282:35:6"
                },
                {
                  "assignments": [
                    7221
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7221,
                      "mutability": "mutable",
                      "name": "tPromise",
                      "nodeType": "VariableDeclaration",
                      "scope": 7256,
                      "src": "19328:23:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                        "typeString": "struct VoucherKernel.Promise"
                      },
                      "typeName": {
                        "id": 7220,
                        "name": "Promise",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6429,
                        "src": "19328:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Promise_$6429_storage_ptr",
                          "typeString": "struct VoucherKernel.Promise"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7227,
                  "initialValue": {
                    "baseExpression": {
                      "id": 7222,
                      "name": "promises",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6444,
                      "src": "19367:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                        "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                      }
                    },
                    "id": 7226,
                    "indexExpression": {
                      "arguments": [
                        {
                          "id": 7224,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7192,
                          "src": "19402:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7223,
                        "name": "getPromiseIdFromVoucherId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8260,
                        "src": "19376:25:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (uint256) view returns (bytes32)"
                        }
                      },
                      "id": 7225,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19376:42:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19367:52:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                      "typeString": "struct VoucherKernel.Promise storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19328:91:6"
                },
                {
                  "expression": {
                    "id": 7234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7228,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "19432:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7230,
                        "indexExpression": {
                          "id": 7229,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7192,
                          "src": "19447:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "19432:31:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7231,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "complainPeriodStart",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6265,
                      "src": "19432:51:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 7232,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "19486:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 7233,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "19486:15:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19432:69:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7235,
                  "nodeType": "ExpressionStatement",
                  "src": "19432:69:6"
                },
                {
                  "expression": {
                    "id": 7247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7236,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "19512:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7238,
                        "indexExpression": {
                          "id": 7237,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7192,
                          "src": "19527:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "19512:31:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7239,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6259,
                      "src": "19512:38:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 7241,
                              "name": "vouchersStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6463,
                              "src": "19577:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                              }
                            },
                            "id": 7243,
                            "indexExpression": {
                              "id": 7242,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7192,
                              "src": "19592:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "19577:31:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                            }
                          },
                          "id": 7244,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6259,
                          "src": "19577:38:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 7245,
                          "name": "IDX_REDEEM",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6199,
                          "src": "19630:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7240,
                        "name": "setChange",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6379,
                        "src": "19553:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                          "typeString": "function (uint8,uint8) pure returns (uint8)"
                        }
                      },
                      "id": 7246,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19553:98:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "19512:139:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 7248,
                  "nodeType": "ExpressionStatement",
                  "src": "19512:139:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7250,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7192,
                        "src": "19702:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 7251,
                        "name": "_msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7194,
                        "src": "19732:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 7252,
                          "name": "tPromise",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7221,
                          "src": "19757:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                            "typeString": "struct VoucherKernel.Promise memory"
                          }
                        },
                        "id": 7253,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "promiseId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6412,
                        "src": "19757:18:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 7249,
                      "name": "LogVoucherRedeemed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6545,
                      "src": "19669:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (uint256,address,bytes32)"
                      }
                    },
                    "id": 7254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19669:117:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7255,
                  "nodeType": "EmitStatement",
                  "src": "19664:122:6"
                }
              ]
            },
            "documentation": {
              "id": 7190,
              "nodeType": "StructuredDocumentation",
              "src": "18601:185:6",
              "text": " @notice Redemption of the vouchers promise\n @param _tokenIdVoucher   ID of the voucher\n @param _msgSender   account called the fn from the BR contract"
            },
            "functionSelector": "7bde82f2",
            "id": 7257,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7198,
                "modifierName": {
                  "id": 7197,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11999,
                  "src": "18898:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18898:13:6"
              },
              {
                "id": 7200,
                "modifierName": {
                  "id": 7199,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "18921:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18921:14:6"
              },
              {
                "arguments": [
                  {
                    "id": 7202,
                    "name": "_tokenIdVoucher",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7192,
                    "src": "18962:15:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "id": 7203,
                    "name": "_msgSender",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7194,
                    "src": "18979:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7204,
                "modifierName": {
                  "id": 7201,
                  "name": "onlyVoucherOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6669,
                  "src": "18945:16:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$_t_address_$",
                    "typeString": "modifier (uint256,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18945:45:6"
              }
            ],
            "name": "redeem",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7196,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "18880:8:6"
            },
            "parameters": {
              "id": 7195,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7192,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 7257,
                  "src": "18808:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7191,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18808:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7194,
                  "mutability": "mutable",
                  "name": "_msgSender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7257,
                  "src": "18833:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7193,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18833:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18807:45:6"
            },
            "returnParameters": {
              "id": 7205,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18996:0:6"
            },
            "scope": 8535,
            "src": "18792:1002:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9379
            ],
            "body": {
              "id": 7313,
              "nodeType": "Block",
              "src": "20263:606:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "baseExpression": {
                                "id": 7276,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "20313:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 7278,
                              "indexExpression": {
                                "id": 7277,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7260,
                                "src": "20328:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "20313:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 7279,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "status",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6259,
                            "src": "20313:38:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 7275,
                          "name": "isStateCommitted",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6284,
                          "src": "20296:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                            "typeString": "function (uint8) pure returns (bool)"
                          }
                        },
                        "id": 7280,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20296:56:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e4150504c494341424c455f535441545553",
                        "id": 7281,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20367:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d0faf1dea07f76cde9f53f3359618f66541a0b51c05040e220f0377fad18fdb4",
                          "typeString": "literal_string \"INAPPLICABLE_STATUS\""
                        },
                        "value": "INAPPLICABLE_STATUS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d0faf1dea07f76cde9f53f3359618f66541a0b51c05040e220f0377fad18fdb4",
                          "typeString": "literal_string \"INAPPLICABLE_STATUS\""
                        }
                      ],
                      "id": 7274,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "20274:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20274:125:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7283,
                  "nodeType": "ExpressionStatement",
                  "src": "20274:125:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7285,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7260,
                        "src": "20560:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7284,
                      "name": "isInValidityPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8512,
                      "src": "20541:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) view returns (bool)"
                      }
                    },
                    "id": 7286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20541:35:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7287,
                  "nodeType": "ExpressionStatement",
                  "src": "20541:35:6"
                },
                {
                  "expression": {
                    "id": 7294,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7288,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "20589:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7290,
                        "indexExpression": {
                          "id": 7289,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7260,
                          "src": "20604:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20589:31:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7291,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "complainPeriodStart",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6265,
                      "src": "20589:51:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 7292,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "20643:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 7293,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "20643:15:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20589:69:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 7295,
                  "nodeType": "ExpressionStatement",
                  "src": "20589:69:6"
                },
                {
                  "expression": {
                    "id": 7307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7296,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "20669:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7298,
                        "indexExpression": {
                          "id": 7297,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7260,
                          "src": "20684:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "20669:31:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7299,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6259,
                      "src": "20669:38:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 7301,
                              "name": "vouchersStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6463,
                              "src": "20734:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                              }
                            },
                            "id": 7303,
                            "indexExpression": {
                              "id": 7302,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7260,
                              "src": "20749:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "20734:31:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                            }
                          },
                          "id": 7304,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6259,
                          "src": "20734:38:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 7305,
                          "name": "IDX_REFUND",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6202,
                          "src": "20787:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7300,
                        "name": "setChange",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6379,
                        "src": "20710:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                          "typeString": "function (uint8,uint8) pure returns (uint8)"
                        }
                      },
                      "id": 7306,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20710:98:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "20669:139:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 7308,
                  "nodeType": "ExpressionStatement",
                  "src": "20669:139:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7310,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7260,
                        "src": "20845:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7309,
                      "name": "LogVoucherRefunded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6549,
                      "src": "20826:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 7311,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20826:35:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7312,
                  "nodeType": "EmitStatement",
                  "src": "20821:40:6"
                }
              ]
            },
            "documentation": {
              "id": 7258,
              "nodeType": "StructuredDocumentation",
              "src": "19883:170:6",
              "text": " @notice Refunding a voucher\n @param _tokenIdVoucher   ID of the voucher\n @param _msgSender   account called the fn from the BR contract"
            },
            "functionSelector": "7ad226dc",
            "id": 7314,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7266,
                "modifierName": {
                  "id": 7265,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11999,
                  "src": "20165:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20165:13:6"
              },
              {
                "id": 7268,
                "modifierName": {
                  "id": 7267,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "20188:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20188:14:6"
              },
              {
                "arguments": [
                  {
                    "id": 7270,
                    "name": "_tokenIdVoucher",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7260,
                    "src": "20229:15:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "id": 7271,
                    "name": "_msgSender",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7262,
                    "src": "20246:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7272,
                "modifierName": {
                  "id": 7269,
                  "name": "onlyVoucherOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6669,
                  "src": "20212:16:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$_t_address_$",
                    "typeString": "modifier (uint256,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20212:45:6"
              }
            ],
            "name": "refund",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7264,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "20147:8:6"
            },
            "parameters": {
              "id": 7263,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7260,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 7314,
                  "src": "20075:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7259,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20075:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7262,
                  "mutability": "mutable",
                  "name": "_msgSender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7314,
                  "src": "20100:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7261,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20100:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20074:45:6"
            },
            "returnParameters": {
              "id": 7273,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20263:0:6"
            },
            "scope": 8535,
            "src": "20059:810:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9387
            ],
            "body": {
              "id": 7554,
              "nodeType": "Block",
              "src": "21270:4132:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7339,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "21303:63:6",
                        "subExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 7333,
                                  "name": "vouchersStatus",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6463,
                                  "src": "21313:14:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                    "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                  }
                                },
                                "id": 7335,
                                "indexExpression": {
                                  "id": 7334,
                                  "name": "_tokenIdVoucher",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7317,
                                  "src": "21328:15:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "21313:31:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                  "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                }
                              },
                              "id": 7336,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "status",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6259,
                              "src": "21313:38:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 7337,
                              "name": "IDX_COMPLAIN",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6208,
                              "src": "21353:12:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 7332,
                            "name": "isStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6361,
                            "src": "21304:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8,uint8) pure returns (bool)"
                            }
                          },
                          "id": 7338,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21304:62:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f434f4d504c41494e4544",
                        "id": 7340,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21381:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_53494b53c753dedbccdbfa0c63e99e92e800f4df9983b45d49261662c2354c30",
                          "typeString": "literal_string \"ALREADY_COMPLAINED\""
                        },
                        "value": "ALREADY_COMPLAINED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_53494b53c753dedbccdbfa0c63e99e92e800f4df9983b45d49261662c2354c30",
                          "typeString": "literal_string \"ALREADY_COMPLAINED\""
                        }
                      ],
                      "id": 7331,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "21281:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21281:131:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7342,
                  "nodeType": "ExpressionStatement",
                  "src": "21281:131:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7351,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "21527:60:6",
                        "subExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 7345,
                                  "name": "vouchersStatus",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6463,
                                  "src": "21537:14:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                    "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                  }
                                },
                                "id": 7347,
                                "indexExpression": {
                                  "id": 7346,
                                  "name": "_tokenIdVoucher",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7317,
                                  "src": "21552:15:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "21537:31:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                  "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                }
                              },
                              "id": 7348,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "status",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6259,
                              "src": "21537:38:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 7349,
                              "name": "IDX_FINAL",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6214,
                              "src": "21577:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 7344,
                            "name": "isStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6361,
                            "src": "21528:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8,uint8) pure returns (bool)"
                            }
                          },
                          "id": 7350,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21528:59:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f46494e414c495a4544",
                        "id": 7352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21602:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a84b963af821bd2b41d802daa2c7840123c5cf834cde12aa10bdce75ff0df2d9",
                          "typeString": "literal_string \"ALREADY_FINALIZED\""
                        },
                        "value": "ALREADY_FINALIZED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a84b963af821bd2b41d802daa2c7840123c5cf834cde12aa10bdce75ff0df2d9",
                          "typeString": "literal_string \"ALREADY_FINALIZED\""
                        }
                      ],
                      "id": 7343,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "21505:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21505:127:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7354,
                  "nodeType": "ExpressionStatement",
                  "src": "21505:127:6"
                },
                {
                  "assignments": [
                    7356
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7356,
                      "mutability": "mutable",
                      "name": "tPromise",
                      "nodeType": "VariableDeclaration",
                      "scope": 7554,
                      "src": "21776:23:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                        "typeString": "struct VoucherKernel.Promise"
                      },
                      "typeName": {
                        "id": 7355,
                        "name": "Promise",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6429,
                        "src": "21776:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Promise_$6429_storage_ptr",
                          "typeString": "struct VoucherKernel.Promise"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7362,
                  "initialValue": {
                    "baseExpression": {
                      "id": 7357,
                      "name": "promises",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6444,
                      "src": "21815:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                        "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                      }
                    },
                    "id": 7361,
                    "indexExpression": {
                      "arguments": [
                        {
                          "id": 7359,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7317,
                          "src": "21850:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7358,
                        "name": "getPromiseIdFromVoucherId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8260,
                        "src": "21824:25:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (uint256) view returns (bytes32)"
                        }
                      },
                      "id": 7360,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21824:42:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "21815:52:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                      "typeString": "struct VoucherKernel.Promise storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21776:91:6"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 7364,
                              "name": "vouchersStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6463,
                              "src": "21957:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                              }
                            },
                            "id": 7366,
                            "indexExpression": {
                              "id": 7365,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7317,
                              "src": "21972:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "21957:31:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                            }
                          },
                          "id": 7367,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6259,
                          "src": "21957:38:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7363,
                        "name": "isStateRedemptionSigned",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6303,
                        "src": "21933:23:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                          "typeString": "function (uint8) pure returns (bool)"
                        }
                      },
                      "id": 7368,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21933:63:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 7370,
                              "name": "vouchersStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6463,
                              "src": "22029:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                              }
                            },
                            "id": 7372,
                            "indexExpression": {
                              "id": 7371,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7317,
                              "src": "22044:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "22029:31:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                            }
                          },
                          "id": 7373,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6259,
                          "src": "22029:38:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7369,
                        "name": "isStateRefunded",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6322,
                        "src": "22013:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                          "typeString": "function (uint8) pure returns (bool)"
                        }
                      },
                      "id": 7374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22013:55:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "21933:135:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 7442,
                              "name": "vouchersStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6463,
                              "src": "23412:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                              }
                            },
                            "id": 7444,
                            "indexExpression": {
                              "id": 7443,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7317,
                              "src": "23427:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "23412:31:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                            }
                          },
                          "id": 7445,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6259,
                          "src": "23412:38:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7441,
                        "name": "isStateExpired",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6341,
                        "src": "23397:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                          "typeString": "function (uint8) pure returns (bool)"
                        }
                      },
                      "id": 7446,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23397:54:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "arguments": [
                          {
                            "expression": {
                              "baseExpression": {
                                "id": 7509,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "24617:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 7511,
                              "indexExpression": {
                                "id": 7510,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7317,
                                "src": "24632:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "24617:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 7512,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "status",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6259,
                            "src": "24617:38:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          {
                            "id": 7513,
                            "name": "IDX_CANCEL_FAULT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6211,
                            "src": "24657:16:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 7508,
                          "name": "isStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6361,
                          "src": "24608:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                            "typeString": "function (uint8,uint8) pure returns (bool)"
                          }
                        },
                        "id": 7514,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24608:66:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 7550,
                        "nodeType": "Block",
                        "src": "25243:152:6",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "hexValue": "494e4150504c494341424c455f535441545553",
                                  "id": 7547,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "25265:21:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_d0faf1dea07f76cde9f53f3359618f66541a0b51c05040e220f0377fad18fdb4",
                                    "typeString": "literal_string \"INAPPLICABLE_STATUS\""
                                  },
                                  "value": "INAPPLICABLE_STATUS"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_d0faf1dea07f76cde9f53f3359618f66541a0b51c05040e220f0377fad18fdb4",
                                    "typeString": "literal_string \"INAPPLICABLE_STATUS\""
                                  }
                                ],
                                "id": 7546,
                                "name": "revert",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -19,
                                  -19
                                ],
                                "referencedDeclaration": -19,
                                "src": "25258:6:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (string memory) pure"
                                }
                              },
                              "id": 7548,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25258:29:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 7549,
                            "nodeType": "ExpressionStatement",
                            "src": "25258:29:6"
                          }
                        ]
                      },
                      "id": 7551,
                      "nodeType": "IfStatement",
                      "src": "24590:805:6",
                      "trueBody": {
                        "id": 7545,
                        "nodeType": "Block",
                        "src": "24686:551:6",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7524,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 7516,
                                      "name": "block",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -4,
                                      "src": "24727:5:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_block",
                                        "typeString": "block"
                                      }
                                    },
                                    "id": 7517,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "timestamp",
                                    "nodeType": "MemberAccess",
                                    "src": "24727:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<=",
                                  "rightExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7523,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "baseExpression": {
                                          "id": 7518,
                                          "name": "vouchersStatus",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6463,
                                          "src": "24767:14:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                          }
                                        },
                                        "id": 7520,
                                        "indexExpression": {
                                          "id": 7519,
                                          "name": "_tokenIdVoucher",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7317,
                                          "src": "24782:15:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "24767:31:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                        }
                                      },
                                      "id": 7521,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "complainPeriodStart",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 6265,
                                      "src": "24767:51:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 7522,
                                      "name": "complainPeriod",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6507,
                                      "src": "24846:14:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "24767:93:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "24727:133:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "hexValue": "434f4d504c41494e504552494f445f45585049524544",
                                  "id": 7525,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "24879:24:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                    "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                  },
                                  "value": "COMPLAINPERIOD_EXPIRED"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                    "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                  }
                                ],
                                "id": 7515,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "24701:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 7526,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24701:217:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 7527,
                            "nodeType": "ExpressionStatement",
                            "src": "24701:217:6"
                          },
                          {
                            "expression": {
                              "id": 7539,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 7528,
                                    "name": "vouchersStatus",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6463,
                                    "src": "25015:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                      "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                    }
                                  },
                                  "id": 7530,
                                  "indexExpression": {
                                    "id": 7529,
                                    "name": "_tokenIdVoucher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7317,
                                    "src": "25030:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "25015:31:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                    "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                  }
                                },
                                "id": 7531,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "status",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6259,
                                "src": "25015:38:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 7533,
                                        "name": "vouchersStatus",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6463,
                                        "src": "25084:14:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                          "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                        }
                                      },
                                      "id": 7535,
                                      "indexExpression": {
                                        "id": 7534,
                                        "name": "_tokenIdVoucher",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7317,
                                        "src": "25099:15:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "25084:31:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                        "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                      }
                                    },
                                    "id": 7536,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "status",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6259,
                                    "src": "25084:38:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  {
                                    "id": 7537,
                                    "name": "IDX_COMPLAIN",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6208,
                                    "src": "25141:12:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  ],
                                  "id": 7532,
                                  "name": "setChange",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6379,
                                  "src": "25056:9:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                                    "typeString": "function (uint8,uint8) pure returns (uint8)"
                                  }
                                },
                                "id": 7538,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25056:112:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "25015:153:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "id": 7540,
                            "nodeType": "ExpressionStatement",
                            "src": "25015:153:6"
                          },
                          {
                            "eventCall": {
                              "arguments": [
                                {
                                  "id": 7542,
                                  "name": "_tokenIdVoucher",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7317,
                                  "src": "25209:15:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7541,
                                "name": "LogVoucherComplain",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6553,
                                "src": "25190:18:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                  "typeString": "function (uint256)"
                                }
                              },
                              "id": 7543,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25190:35:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 7544,
                            "nodeType": "EmitStatement",
                            "src": "25185:40:6"
                          }
                        ]
                      }
                    },
                    "id": 7552,
                    "nodeType": "IfStatement",
                    "src": "23393:2002:6",
                    "trueBody": {
                      "id": 7507,
                      "nodeType": "Block",
                      "src": "23453:1131:6",
                      "statements": [
                        {
                          "condition": {
                            "id": 7454,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "23490:128:6",
                            "subExpression": {
                              "arguments": [
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 7448,
                                      "name": "vouchersStatus",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6463,
                                      "src": "23522:14:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                        "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                      }
                                    },
                                    "id": 7450,
                                    "indexExpression": {
                                      "id": 7449,
                                      "name": "_tokenIdVoucher",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7317,
                                      "src": "23537:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "23522:31:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                      "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                    }
                                  },
                                  "id": 7451,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "status",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6259,
                                  "src": "23522:38:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "id": 7452,
                                  "name": "IDX_CANCEL_FAULT",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6211,
                                  "src": "23583:16:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                ],
                                "id": 7447,
                                "name": "isStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6361,
                                "src": "23491:8:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                                  "typeString": "function (uint8,uint8) pure returns (bool)"
                                }
                              },
                              "id": 7453,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23491:127:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "id": 7480,
                            "nodeType": "Block",
                            "src": "23946:261:6",
                            "statements": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7476,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 7470,
                                          "name": "block",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -4,
                                          "src": "23995:5:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_block",
                                            "typeString": "block"
                                          }
                                        },
                                        "id": 7471,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "timestamp",
                                        "nodeType": "MemberAccess",
                                        "src": "23995:15:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7475,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "id": 7472,
                                            "name": "tPromise",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7356,
                                            "src": "24014:8:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                                              "typeString": "struct VoucherKernel.Promise memory"
                                            }
                                          },
                                          "id": 7473,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "validTo",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6420,
                                          "src": "24014:16:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 7474,
                                          "name": "complainPeriod",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6507,
                                          "src": "24033:14:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "24014:33:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "23995:52:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    {
                                      "hexValue": "434f4d504c41494e504552494f445f45585049524544",
                                      "id": 7477,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "24070:24:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                        "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                      },
                                      "value": "COMPLAINPERIOD_EXPIRED"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                        "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                      }
                                    ],
                                    "id": 7469,
                                    "name": "require",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -18,
                                      -18
                                    ],
                                    "referencedDeclaration": -18,
                                    "src": "23965:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                      "typeString": "function (bool,string memory) pure"
                                    }
                                  },
                                  "id": 7478,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "23965:148:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 7479,
                                "nodeType": "ExpressionStatement",
                                "src": "23965:148:6"
                              }
                            ]
                          },
                          "id": 7481,
                          "nodeType": "IfStatement",
                          "src": "23468:739:6",
                          "trueBody": {
                            "id": 7468,
                            "nodeType": "Block",
                            "src": "23634:306:6",
                            "statements": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7464,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 7456,
                                          "name": "block",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -4,
                                          "src": "23683:5:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_block",
                                            "typeString": "block"
                                          }
                                        },
                                        "id": 7457,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "timestamp",
                                        "nodeType": "MemberAccess",
                                        "src": "23683:15:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7463,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 7461,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "expression": {
                                              "id": 7458,
                                              "name": "tPromise",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7356,
                                              "src": "23727:8:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                                                "typeString": "struct VoucherKernel.Promise memory"
                                              }
                                            },
                                            "id": 7459,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "validTo",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6420,
                                            "src": "23727:16:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "+",
                                          "rightExpression": {
                                            "id": 7460,
                                            "name": "complainPeriod",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6507,
                                            "src": "23746:14:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "23727:33:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 7462,
                                          "name": "cancelFaultPeriod",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6509,
                                          "src": "23763:17:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "23727:53:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "23683:97:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    {
                                      "hexValue": "434f4d504c41494e504552494f445f45585049524544",
                                      "id": 7465,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "23803:24:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                        "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                      },
                                      "value": "COMPLAINPERIOD_EXPIRED"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                        "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                      }
                                    ],
                                    "id": 7455,
                                    "name": "require",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -18,
                                      -18
                                    ],
                                    "referencedDeclaration": -18,
                                    "src": "23653:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                      "typeString": "function (bool,string memory) pure"
                                    }
                                  },
                                  "id": 7466,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "23653:193:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 7467,
                                "nodeType": "ExpressionStatement",
                                "src": "23653:193:6"
                              }
                            ]
                          }
                        },
                        {
                          "expression": {
                            "id": 7488,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "expression": {
                                "baseExpression": {
                                  "id": 7482,
                                  "name": "vouchersStatus",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6463,
                                  "src": "24223:14:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                    "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                  }
                                },
                                "id": 7484,
                                "indexExpression": {
                                  "id": 7483,
                                  "name": "_tokenIdVoucher",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7317,
                                  "src": "24238:15:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "24223:31:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                  "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                }
                              },
                              "id": 7485,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "memberName": "cancelFaultPeriodStart",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6267,
                              "src": "24223:54:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "expression": {
                                "id": 7486,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "24280:5:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 7487,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "24280:33:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "24223:90:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7489,
                          "nodeType": "ExpressionStatement",
                          "src": "24223:90:6"
                        },
                        {
                          "expression": {
                            "id": 7501,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "expression": {
                                "baseExpression": {
                                  "id": 7490,
                                  "name": "vouchersStatus",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6463,
                                  "src": "24328:14:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                    "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                  }
                                },
                                "id": 7492,
                                "indexExpression": {
                                  "id": 7491,
                                  "name": "_tokenIdVoucher",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7317,
                                  "src": "24343:15:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "24328:31:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                  "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                }
                              },
                              "id": 7493,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "memberName": "status",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6259,
                              "src": "24328:38:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "arguments": [
                                {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 7495,
                                      "name": "vouchersStatus",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6463,
                                      "src": "24397:14:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                        "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                      }
                                    },
                                    "id": 7497,
                                    "indexExpression": {
                                      "id": 7496,
                                      "name": "_tokenIdVoucher",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7317,
                                      "src": "24412:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "24397:31:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                      "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                    }
                                  },
                                  "id": 7498,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "status",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6259,
                                  "src": "24397:38:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "id": 7499,
                                  "name": "IDX_COMPLAIN",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6208,
                                  "src": "24454:12:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                ],
                                "id": 7494,
                                "name": "setChange",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6379,
                                "src": "24369:9:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                                  "typeString": "function (uint8,uint8) pure returns (uint8)"
                                }
                              },
                              "id": 7500,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24369:112:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "src": "24328:153:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "id": 7502,
                          "nodeType": "ExpressionStatement",
                          "src": "24328:153:6"
                        },
                        {
                          "eventCall": {
                            "arguments": [
                              {
                                "id": 7504,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7317,
                                "src": "24522:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7503,
                              "name": "LogVoucherComplain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6553,
                              "src": "24503:18:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                "typeString": "function (uint256)"
                              }
                            },
                            "id": 7505,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24503:35:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7506,
                          "nodeType": "EmitStatement",
                          "src": "24498:40:6"
                        }
                      ]
                    }
                  },
                  "id": 7553,
                  "nodeType": "IfStatement",
                  "src": "21915:3480:6",
                  "trueBody": {
                    "id": 7440,
                    "nodeType": "Block",
                    "src": "22080:1307:6",
                    "statements": [
                      {
                        "condition": {
                          "id": 7383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "22117:128:6",
                          "subExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 7377,
                                    "name": "vouchersStatus",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6463,
                                    "src": "22149:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                      "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                    }
                                  },
                                  "id": 7379,
                                  "indexExpression": {
                                    "id": 7378,
                                    "name": "_tokenIdVoucher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7317,
                                    "src": "22164:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "22149:31:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                    "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                  }
                                },
                                "id": 7380,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "status",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6259,
                                "src": "22149:38:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "id": 7381,
                                "name": "IDX_CANCEL_FAULT",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6211,
                                "src": "22210:16:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 7376,
                              "name": "isStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6361,
                              "src": "22118:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                                "typeString": "function (uint8,uint8) pure returns (bool)"
                              }
                            },
                            "id": 7382,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22118:127:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 7413,
                          "nodeType": "Block",
                          "src": "22666:350:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7409,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 7401,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "22715:5:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 7402,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "src": "22715:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7408,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 7403,
                                            "name": "vouchersStatus",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6463,
                                            "src": "22759:14:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                              "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                            }
                                          },
                                          "id": 7405,
                                          "indexExpression": {
                                            "id": 7404,
                                            "name": "_tokenIdVoucher",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7317,
                                            "src": "22774:15:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "22759:31:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                            "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                          }
                                        },
                                        "id": 7406,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "complainPeriodStart",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6265,
                                        "src": "22759:51:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "id": 7407,
                                        "name": "complainPeriod",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6507,
                                        "src": "22842:14:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "22759:97:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "22715:141:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "434f4d504c41494e504552494f445f45585049524544",
                                    "id": 7410,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "22879:24:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                      "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                    },
                                    "value": "COMPLAINPERIOD_EXPIRED"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                      "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                    }
                                  ],
                                  "id": 7400,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "22685:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 7411,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22685:237:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7412,
                              "nodeType": "ExpressionStatement",
                              "src": "22685:237:6"
                            }
                          ]
                        },
                        "id": 7414,
                        "nodeType": "IfStatement",
                        "src": "22095:921:6",
                        "trueBody": {
                          "id": 7399,
                          "nodeType": "Block",
                          "src": "22261:399:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7395,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 7385,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "22310:5:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 7386,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "src": "22310:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7394,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7392,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "baseExpression": {
                                              "id": 7387,
                                              "name": "vouchersStatus",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6463,
                                              "src": "22354:14:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                              }
                                            },
                                            "id": 7389,
                                            "indexExpression": {
                                              "id": 7388,
                                              "name": "_tokenIdVoucher",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7317,
                                              "src": "22369:15:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "22354:31:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                            }
                                          },
                                          "id": 7390,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "complainPeriodStart",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6265,
                                          "src": "22354:51:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 7391,
                                          "name": "complainPeriod",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6507,
                                          "src": "22437:14:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "22354:97:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "id": 7393,
                                        "name": "cancelFaultPeriod",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6509,
                                        "src": "22483:17:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "22354:146:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "22310:190:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "434f4d504c41494e504552494f445f45585049524544",
                                    "id": 7396,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "22523:24:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                      "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                    },
                                    "value": "COMPLAINPERIOD_EXPIRED"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_b6aa6e9903150cf6a99887becd04ad40e714d2c2e53062086a1ed6cb55f057a5",
                                      "typeString": "literal_string \"COMPLAINPERIOD_EXPIRED\""
                                    }
                                  ],
                                  "id": 7384,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "22280:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 7397,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22280:286:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7398,
                              "nodeType": "ExpressionStatement",
                              "src": "22280:286:6"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 7421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 7415,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "23032:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 7417,
                              "indexExpression": {
                                "id": 7416,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7317,
                                "src": "23047:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "23032:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 7418,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "cancelFaultPeriodStart",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6267,
                            "src": "23032:54:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 7419,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "23089:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 7420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "23089:33:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23032:90:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7422,
                        "nodeType": "ExpressionStatement",
                        "src": "23032:90:6"
                      },
                      {
                        "expression": {
                          "id": 7434,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 7423,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "23137:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 7425,
                              "indexExpression": {
                                "id": 7424,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7317,
                                "src": "23152:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "23137:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 7426,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "status",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6259,
                            "src": "23137:38:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 7428,
                                    "name": "vouchersStatus",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6463,
                                    "src": "23206:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                      "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                    }
                                  },
                                  "id": 7430,
                                  "indexExpression": {
                                    "id": 7429,
                                    "name": "_tokenIdVoucher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7317,
                                    "src": "23221:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "23206:31:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                    "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                  }
                                },
                                "id": 7431,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "status",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6259,
                                "src": "23206:38:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "id": 7432,
                                "name": "IDX_COMPLAIN",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6208,
                                "src": "23263:12:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 7427,
                              "name": "setChange",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6379,
                              "src": "23178:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                                "typeString": "function (uint8,uint8) pure returns (uint8)"
                              }
                            },
                            "id": 7433,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23178:112:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "23137:153:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 7435,
                        "nodeType": "ExpressionStatement",
                        "src": "23137:153:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 7437,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7317,
                              "src": "23331:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7436,
                            "name": "LogVoucherComplain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6553,
                            "src": "23312:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 7438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23312:35:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7439,
                        "nodeType": "EmitStatement",
                        "src": "23307:40:6"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 7315,
              "nodeType": "StructuredDocumentation",
              "src": "20877:181:6",
              "text": " @notice Issue a complain for a voucher\n @param _tokenIdVoucher   ID of the voucher\n @param _msgSender   account called the fn from the BR contract"
            },
            "functionSelector": "66db9a09",
            "id": 7555,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7323,
                "modifierName": {
                  "id": 7322,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11999,
                  "src": "21172:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21172:13:6"
              },
              {
                "id": 7325,
                "modifierName": {
                  "id": 7324,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "21195:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21195:14:6"
              },
              {
                "arguments": [
                  {
                    "id": 7327,
                    "name": "_tokenIdVoucher",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7317,
                    "src": "21236:15:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "id": 7328,
                    "name": "_msgSender",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7319,
                    "src": "21253:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 7329,
                "modifierName": {
                  "id": 7326,
                  "name": "onlyVoucherOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6669,
                  "src": "21219:16:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$_t_address_$",
                    "typeString": "modifier (uint256,address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "21219:45:6"
              }
            ],
            "name": "complain",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7321,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "21154:8:6"
            },
            "parameters": {
              "id": 7320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7317,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 7555,
                  "src": "21082:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7316,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21082:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7319,
                  "mutability": "mutable",
                  "name": "_msgSender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7555,
                  "src": "21107:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7318,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21107:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21081:45:6"
            },
            "returnParameters": {
              "id": 7330,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21270:0:6"
            },
            "scope": 8535,
            "src": "21064:4338:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9395
            ],
            "body": {
              "id": 7754,
              "nodeType": "Block",
              "src": "25715:3435:6",
              "statements": [
                {
                  "assignments": [
                    7567
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7567,
                      "mutability": "mutable",
                      "name": "tokenIdSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 7754,
                      "src": "25726:21:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7566,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "25726:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7571,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 7569,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7558,
                        "src": "25773:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7568,
                      "name": "getIdSupplyFromVoucher",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8230,
                      "src": "25750:22:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256)"
                      }
                    },
                    "id": 7570,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25750:39:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25726:63:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7577,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 7574,
                              "name": "tokenIdSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7567,
                              "src": "25838:13:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7573,
                            "name": "getSupplyHolder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8429,
                            "src": "25822:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 7575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25822:30:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 7576,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7560,
                          "src": "25856:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "25822:44:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f434f46",
                        "id": 7578,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "25881:18:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b9f9f283f8fc428e60cb969208985ed8e7933a404e10a1705db091f62778085a",
                          "typeString": "literal_string \"UNAUTHORIZED_COF\""
                        },
                        "value": "UNAUTHORIZED_COF"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b9f9f283f8fc428e60cb969208985ed8e7933a404e10a1705db091f62778085a",
                          "typeString": "literal_string \"UNAUTHORIZED_COF\""
                        }
                      ],
                      "id": 7572,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "25800:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25800:110:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7580,
                  "nodeType": "ExpressionStatement",
                  "src": "25800:110:6"
                },
                {
                  "assignments": [
                    7582
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7582,
                      "mutability": "mutable",
                      "name": "tStatus",
                      "nodeType": "VariableDeclaration",
                      "scope": 7754,
                      "src": "26007:13:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 7581,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "26007:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7587,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 7583,
                        "name": "vouchersStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6463,
                        "src": "26023:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                          "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                        }
                      },
                      "id": 7585,
                      "indexExpression": {
                        "id": 7584,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7558,
                        "src": "26038:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "26023:31:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                        "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                      }
                    },
                    "id": 7586,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "status",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6259,
                    "src": "26023:38:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26007:54:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7593,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "26082:36:6",
                        "subExpression": {
                          "arguments": [
                            {
                              "id": 7590,
                              "name": "tStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7582,
                              "src": "26092:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 7591,
                              "name": "IDX_CANCEL_FAULT",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6211,
                              "src": "26101:16:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 7589,
                            "name": "isStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6361,
                            "src": "26083:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8,uint8) pure returns (bool)"
                            }
                          },
                          "id": 7592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26083:35:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f43414e43454c4641554c54",
                        "id": 7594,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "26120:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f70a5f26a12584c06a5ed05cce48137219718140f1a56ac906bad6e55eaaeb1e",
                          "typeString": "literal_string \"ALREADY_CANCELFAULT\""
                        },
                        "value": "ALREADY_CANCELFAULT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f70a5f26a12584c06a5ed05cce48137219718140f1a56ac906bad6e55eaaeb1e",
                          "typeString": "literal_string \"ALREADY_CANCELFAULT\""
                        }
                      ],
                      "id": 7588,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "26074:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26074:68:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7596,
                  "nodeType": "ExpressionStatement",
                  "src": "26074:68:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7602,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "26243:29:6",
                        "subExpression": {
                          "arguments": [
                            {
                              "id": 7599,
                              "name": "tStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7582,
                              "src": "26253:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 7600,
                              "name": "IDX_FINAL",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6214,
                              "src": "26262:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 7598,
                            "name": "isStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6361,
                            "src": "26244:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8,uint8) pure returns (bool)"
                            }
                          },
                          "id": 7601,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26244:28:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f46494e414c495a4544",
                        "id": 7603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "26274:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a84b963af821bd2b41d802daa2c7840123c5cf834cde12aa10bdce75ff0df2d9",
                          "typeString": "literal_string \"ALREADY_FINALIZED\""
                        },
                        "value": "ALREADY_FINALIZED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a84b963af821bd2b41d802daa2c7840123c5cf834cde12aa10bdce75ff0df2d9",
                          "typeString": "literal_string \"ALREADY_FINALIZED\""
                        }
                      ],
                      "id": 7597,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "26235:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26235:59:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7605,
                  "nodeType": "ExpressionStatement",
                  "src": "26235:59:6"
                },
                {
                  "assignments": [
                    7607
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7607,
                      "mutability": "mutable",
                      "name": "tPromise",
                      "nodeType": "VariableDeclaration",
                      "scope": 7754,
                      "src": "26389:23:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                        "typeString": "struct VoucherKernel.Promise"
                      },
                      "typeName": {
                        "id": 7606,
                        "name": "Promise",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6429,
                        "src": "26389:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Promise_$6429_storage_ptr",
                          "typeString": "struct VoucherKernel.Promise"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7613,
                  "initialValue": {
                    "baseExpression": {
                      "id": 7608,
                      "name": "promises",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6444,
                      "src": "26428:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                        "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                      }
                    },
                    "id": 7612,
                    "indexExpression": {
                      "arguments": [
                        {
                          "id": 7610,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7558,
                          "src": "26463:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7609,
                        "name": "getPromiseIdFromVoucherId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8260,
                        "src": "26437:25:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (uint256) view returns (bytes32)"
                        }
                      },
                      "id": 7611,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26437:42:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "26428:52:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                      "typeString": "struct VoucherKernel.Promise storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26389:91:6"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7622,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 7615,
                          "name": "tStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7582,
                          "src": "26506:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 7616,
                          "name": "IDX_REDEEM",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6199,
                          "src": "26515:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7614,
                        "name": "isStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6361,
                        "src": "26497:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                          "typeString": "function (uint8,uint8) pure returns (bool)"
                        }
                      },
                      "id": 7617,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26497:29:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 7619,
                          "name": "tStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7582,
                          "src": "26539:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 7620,
                          "name": "IDX_REFUND",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6202,
                          "src": "26548:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7618,
                        "name": "isStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6361,
                        "src": "26530:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                          "typeString": "function (uint8,uint8) pure returns (bool)"
                        }
                      },
                      "id": 7621,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26530:29:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "26497:62:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "arguments": [
                        {
                          "id": 7669,
                          "name": "tStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7582,
                          "src": "27576:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 7670,
                          "name": "IDX_EXPIRE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6205,
                          "src": "27585:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7668,
                        "name": "isStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6361,
                        "src": "27567:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                          "typeString": "function (uint8,uint8) pure returns (bool)"
                        }
                      },
                      "id": 7671,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27567:29:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "arguments": [
                          {
                            "id": 7708,
                            "name": "tStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7582,
                            "src": "28373:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 7707,
                          "name": "isStateCommitted",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6284,
                          "src": "28356:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                            "typeString": "function (uint8) pure returns (bool)"
                          }
                        },
                        "id": 7709,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "28356:25:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 7736,
                        "nodeType": "Block",
                        "src": "28808:152:6",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "hexValue": "494e4150504c494341424c455f535441545553",
                                  "id": 7733,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "28830:21:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_d0faf1dea07f76cde9f53f3359618f66541a0b51c05040e220f0377fad18fdb4",
                                    "typeString": "literal_string \"INAPPLICABLE_STATUS\""
                                  },
                                  "value": "INAPPLICABLE_STATUS"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_d0faf1dea07f76cde9f53f3359618f66541a0b51c05040e220f0377fad18fdb4",
                                    "typeString": "literal_string \"INAPPLICABLE_STATUS\""
                                  }
                                ],
                                "id": 7732,
                                "name": "revert",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -19,
                                  -19
                                ],
                                "referencedDeclaration": -19,
                                "src": "28823:6:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (string memory) pure"
                                }
                              },
                              "id": 7734,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "28823:29:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 7735,
                            "nodeType": "ExpressionStatement",
                            "src": "28823:29:6"
                          }
                        ]
                      },
                      "id": 7737,
                      "nodeType": "IfStatement",
                      "src": "28352:608:6",
                      "trueBody": {
                        "id": 7731,
                        "nodeType": "Block",
                        "src": "28383:419:6",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7719,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 7711,
                                      "name": "block",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -4,
                                      "src": "28457:5:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_block",
                                        "typeString": "block"
                                      }
                                    },
                                    "id": 7712,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "timestamp",
                                    "nodeType": "MemberAccess",
                                    "src": "28457:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<=",
                                  "rightExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7718,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7716,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 7713,
                                          "name": "tPromise",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7607,
                                          "src": "28497:8:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                                            "typeString": "struct VoucherKernel.Promise memory"
                                          }
                                        },
                                        "id": 7714,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "validTo",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6420,
                                        "src": "28497:16:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "id": 7715,
                                        "name": "complainPeriod",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6507,
                                        "src": "28516:14:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "28497:33:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 7717,
                                      "name": "cancelFaultPeriod",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6509,
                                      "src": "28533:17:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "28497:53:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "28457:93:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "hexValue": "434f46504552494f445f45585049524544",
                                  "id": 7720,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "28569:19:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                    "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                  },
                                  "value": "COFPERIOD_EXPIRED"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                    "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                  }
                                ],
                                "id": 7710,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "28431:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 7721,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "28431:172:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 7722,
                            "nodeType": "ExpressionStatement",
                            "src": "28431:172:6"
                          },
                          {
                            "expression": {
                              "id": 7729,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 7723,
                                    "name": "vouchersStatus",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6463,
                                    "src": "28696:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                      "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                    }
                                  },
                                  "id": 7725,
                                  "indexExpression": {
                                    "id": 7724,
                                    "name": "_tokenIdVoucher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7558,
                                    "src": "28711:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "28696:31:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                    "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                  }
                                },
                                "id": 7726,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "complainPeriodStart",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6265,
                                "src": "28696:51:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "expression": {
                                  "id": 7727,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "28750:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 7728,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "28750:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "28696:69:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7730,
                            "nodeType": "ExpressionStatement",
                            "src": "28696:69:6"
                          }
                        ]
                      }
                    },
                    "id": 7738,
                    "nodeType": "IfStatement",
                    "src": "27563:1397:6",
                    "trueBody": {
                      "id": 7706,
                      "nodeType": "Block",
                      "src": "27598:748:6",
                      "statements": [
                        {
                          "condition": {
                            "id": 7676,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "27643:32:6",
                            "subExpression": {
                              "arguments": [
                                {
                                  "id": 7673,
                                  "name": "tStatus",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7582,
                                  "src": "27653:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "id": 7674,
                                  "name": "IDX_COMPLAIN",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6208,
                                  "src": "27662:12:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                ],
                                "id": 7672,
                                "name": "isStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6361,
                                "src": "27644:8:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                                  "typeString": "function (uint8,uint8) pure returns (bool)"
                                }
                              },
                              "id": 7675,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "27644:31:6",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "id": 7704,
                            "nodeType": "Block",
                            "src": "27984:351:6",
                            "statements": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7700,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 7692,
                                          "name": "block",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -4,
                                          "src": "28033:5:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_block",
                                            "typeString": "block"
                                          }
                                        },
                                        "id": 7693,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "timestamp",
                                        "nodeType": "MemberAccess",
                                        "src": "28033:15:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7699,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "baseExpression": {
                                              "id": 7694,
                                              "name": "vouchersStatus",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6463,
                                              "src": "28077:14:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                              }
                                            },
                                            "id": 7696,
                                            "indexExpression": {
                                              "id": 7695,
                                              "name": "_tokenIdVoucher",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7558,
                                              "src": "28092:15:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "28077:31:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                            }
                                          },
                                          "id": 7697,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "cancelFaultPeriodStart",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6267,
                                          "src": "28077:54:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 7698,
                                          "name": "cancelFaultPeriod",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6509,
                                          "src": "28163:17:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "28077:103:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "28033:147:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    {
                                      "hexValue": "434f46504552494f445f45585049524544",
                                      "id": 7701,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "28203:19:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                        "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                      },
                                      "value": "COFPERIOD_EXPIRED"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                        "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                      }
                                    ],
                                    "id": 7691,
                                    "name": "require",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -18,
                                      -18
                                    ],
                                    "referencedDeclaration": -18,
                                    "src": "28003:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                      "typeString": "function (bool,string memory) pure"
                                    }
                                  },
                                  "id": 7702,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "28003:238:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 7703,
                                "nodeType": "ExpressionStatement",
                                "src": "28003:238:6"
                              }
                            ]
                          },
                          "id": 7705,
                          "nodeType": "IfStatement",
                          "src": "27639:696:6",
                          "trueBody": {
                            "id": 7690,
                            "nodeType": "Block",
                            "src": "27677:301:6",
                            "statements": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7686,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 7678,
                                          "name": "block",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -4,
                                          "src": "27726:5:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_block",
                                            "typeString": "block"
                                          }
                                        },
                                        "id": 7679,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "timestamp",
                                        "nodeType": "MemberAccess",
                                        "src": "27726:15:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7685,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 7683,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "expression": {
                                              "id": 7680,
                                              "name": "tPromise",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7607,
                                              "src": "27770:8:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                                                "typeString": "struct VoucherKernel.Promise memory"
                                              }
                                            },
                                            "id": 7681,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "validTo",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 6420,
                                            "src": "27770:16:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "+",
                                          "rightExpression": {
                                            "id": 7682,
                                            "name": "complainPeriod",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6507,
                                            "src": "27789:14:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "27770:33:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 7684,
                                          "name": "cancelFaultPeriod",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6509,
                                          "src": "27806:17:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "27770:53:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "27726:97:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    {
                                      "hexValue": "434f46504552494f445f45585049524544",
                                      "id": 7687,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "string",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "27846:19:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                        "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                      },
                                      "value": "COFPERIOD_EXPIRED"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      {
                                        "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                        "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                      }
                                    ],
                                    "id": 7677,
                                    "name": "require",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      -18,
                                      -18
                                    ],
                                    "referencedDeclaration": -18,
                                    "src": "27696:7:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                      "typeString": "function (bool,string memory) pure"
                                    }
                                  },
                                  "id": 7688,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "27696:188:6",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 7689,
                                "nodeType": "ExpressionStatement",
                                "src": "27696:188:6"
                              }
                            ]
                          }
                        }
                      ]
                    }
                  },
                  "id": 7739,
                  "nodeType": "IfStatement",
                  "src": "26493:2467:6",
                  "trueBody": {
                    "id": 7667,
                    "nodeType": "Block",
                    "src": "26561:996:6",
                    "statements": [
                      {
                        "condition": {
                          "id": 7627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "26619:32:6",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 7624,
                                "name": "tStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7582,
                                "src": "26629:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "id": 7625,
                                "name": "IDX_COMPLAIN",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6208,
                                "src": "26638:12:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 7623,
                              "name": "isStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6361,
                              "src": "26620:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                                "typeString": "function (uint8,uint8) pure returns (bool)"
                              }
                            },
                            "id": 7626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26620:31:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 7665,
                          "nodeType": "Block",
                          "src": "27195:351:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7661,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 7653,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "27244:5:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 7654,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "src": "27244:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7660,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 7655,
                                            "name": "vouchersStatus",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6463,
                                            "src": "27288:14:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                              "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                            }
                                          },
                                          "id": 7657,
                                          "indexExpression": {
                                            "id": 7656,
                                            "name": "_tokenIdVoucher",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7558,
                                            "src": "27303:15:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "27288:31:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                            "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                          }
                                        },
                                        "id": 7658,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "cancelFaultPeriodStart",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 6267,
                                        "src": "27288:54:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "id": 7659,
                                        "name": "cancelFaultPeriod",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6509,
                                        "src": "27374:17:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "27288:103:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "27244:147:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "434f46504552494f445f45585049524544",
                                    "id": 7662,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "27414:19:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                      "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                    },
                                    "value": "COFPERIOD_EXPIRED"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                      "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                    }
                                  ],
                                  "id": 7652,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "27214:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 7663,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "27214:238:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7664,
                              "nodeType": "ExpressionStatement",
                              "src": "27214:238:6"
                            }
                          ]
                        },
                        "id": 7666,
                        "nodeType": "IfStatement",
                        "src": "26615:931:6",
                        "trueBody": {
                          "id": 7651,
                          "nodeType": "Block",
                          "src": "26653:536:6",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7639,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 7629,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "26702:5:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 7630,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "src": "26702:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7638,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7636,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "baseExpression": {
                                              "id": 7631,
                                              "name": "vouchersStatus",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6463,
                                              "src": "26746:14:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                              }
                                            },
                                            "id": 7633,
                                            "indexExpression": {
                                              "id": 7632,
                                              "name": "_tokenIdVoucher",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7558,
                                              "src": "26761:15:6",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "26746:31:6",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                            }
                                          },
                                          "id": 7634,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "complainPeriodStart",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 6265,
                                          "src": "26746:51:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 7635,
                                          "name": "complainPeriod",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6507,
                                          "src": "26829:14:6",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "26746:97:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "id": 7637,
                                        "name": "cancelFaultPeriod",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6509,
                                        "src": "26875:17:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "26746:146:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "26702:190:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "434f46504552494f445f45585049524544",
                                    "id": 7640,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26915:19:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                      "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                    },
                                    "value": "COFPERIOD_EXPIRED"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_998311e6678ffb95ded4ac1370bba3e13e3ec1cd4ac07133643384a4491916dc",
                                      "typeString": "literal_string \"COFPERIOD_EXPIRED\""
                                    }
                                  ],
                                  "id": 7628,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "26672:7:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 7641,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26672:281:6",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7642,
                              "nodeType": "ExpressionStatement",
                              "src": "26672:281:6"
                            },
                            {
                              "expression": {
                                "id": 7649,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 7643,
                                      "name": "vouchersStatus",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6463,
                                      "src": "27050:14:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                        "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                      }
                                    },
                                    "id": 7645,
                                    "indexExpression": {
                                      "id": 7644,
                                      "name": "_tokenIdVoucher",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7558,
                                      "src": "27065:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "27050:31:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                      "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                    }
                                  },
                                  "id": 7646,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "complainPeriodStart",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6265,
                                  "src": "27050:51:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "id": 7647,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "27104:5:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 7648,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "27104:37:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "27050:91:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7650,
                              "nodeType": "ExpressionStatement",
                              "src": "27050:91:6"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 7748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7740,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "28972:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7742,
                        "indexExpression": {
                          "id": 7741,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7558,
                          "src": "28987:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "28972:31:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7743,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6259,
                      "src": "28972:38:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 7745,
                          "name": "tStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7582,
                          "src": "29037:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "id": 7746,
                          "name": "IDX_CANCEL_FAULT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6211,
                          "src": "29059:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7744,
                        "name": "setChange",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6379,
                        "src": "29013:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                          "typeString": "function (uint8,uint8) pure returns (uint8)"
                        }
                      },
                      "id": 7747,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29013:73:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "28972:114:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 7749,
                  "nodeType": "ExpressionStatement",
                  "src": "28972:114:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7751,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7558,
                        "src": "29126:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7750,
                      "name": "LogVoucherFaultCancel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6557,
                      "src": "29104:21:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 7752,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29104:38:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7753,
                  "nodeType": "EmitStatement",
                  "src": "29099:43:6"
                }
              ]
            },
            "documentation": {
              "id": 7556,
              "nodeType": "StructuredDocumentation",
              "src": "25410:167:6",
              "text": " @notice Cancel/Fault transaction by the Seller, admitting to a fault or backing out of the deal\n @param _tokenIdVoucher   ID of the voucher"
            },
            "functionSelector": "f5d7aa18",
            "id": 7755,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7564,
                "modifierName": {
                  "id": 7563,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11999,
                  "src": "25696:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "25696:13:6"
              }
            ],
            "name": "cancelOrFault",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7562,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "25678:8:6"
            },
            "parameters": {
              "id": 7561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7558,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 7755,
                  "src": "25606:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7557,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25606:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7560,
                  "mutability": "mutable",
                  "name": "_msgSender",
                  "nodeType": "VariableDeclaration",
                  "scope": 7755,
                  "src": "25631:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7559,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25631:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25605:45:6"
            },
            "returnParameters": {
              "id": 7565,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25715:0:6"
            },
            "scope": 8535,
            "src": "25583:3567:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9405
            ],
            "body": {
              "id": 7809,
              "nodeType": "Block",
              "src": "29662:384:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 7775,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 7772,
                              "name": "_tokenIdSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7758,
                              "src": "29697:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7771,
                            "name": "getSupplyHolder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8429,
                            "src": "29681:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 7773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29681:31:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 7774,
                          "name": "_issuer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7760,
                          "src": "29716:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "29681:42:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e415554484f52495a45445f434f46",
                        "id": 7776,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "29725:18:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b9f9f283f8fc428e60cb969208985ed8e7933a404e10a1705db091f62778085a",
                          "typeString": "literal_string \"UNAUTHORIZED_COF\""
                        },
                        "value": "UNAUTHORIZED_COF"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b9f9f283f8fc428e60cb969208985ed8e7933a404e10a1705db091f62778085a",
                          "typeString": "literal_string \"UNAUTHORIZED_COF\""
                        }
                      ],
                      "id": 7770,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "29673:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7777,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29673:71:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7778,
                  "nodeType": "ExpressionStatement",
                  "src": "29673:71:6"
                },
                {
                  "assignments": [
                    7780
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7780,
                      "mutability": "mutable",
                      "name": "remQty",
                      "nodeType": "VariableDeclaration",
                      "scope": 7809,
                      "src": "29757:14:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 7779,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "29757:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7785,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 7782,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7758,
                        "src": "29793:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 7783,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7760,
                        "src": "29809:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7781,
                      "name": "getRemQtyForSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8280,
                      "src": "29774:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (uint256,address) view returns (uint256)"
                      }
                    },
                    "id": 7784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29774:43:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29757:60:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7789,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 7787,
                          "name": "remQty",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7780,
                          "src": "29838:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 7788,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "29847:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "29838:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f464645525f454d505459",
                        "id": 7790,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "29850:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6876f935fab011de6b034451c60bbcc0620e40b8eebb55c78ca705d7896ccee0",
                          "typeString": "literal_string \"OFFER_EMPTY\""
                        },
                        "value": "OFFER_EMPTY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6876f935fab011de6b034451c60bbcc0620e40b8eebb55c78ca705d7896ccee0",
                          "typeString": "literal_string \"OFFER_EMPTY\""
                        }
                      ],
                      "id": 7786,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "29830:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29830:34:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7792,
                  "nodeType": "ExpressionStatement",
                  "src": "29830:34:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7797,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7760,
                        "src": "29913:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 7798,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7758,
                        "src": "29922:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 7799,
                        "name": "remQty",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7780,
                        "src": "29938:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 7794,
                            "name": "tokensContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6410,
                            "src": "29892:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 7793,
                          "name": "IERC1155ERC721",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8975,
                          "src": "29877:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC1155ERC721_$8975_$",
                            "typeString": "type(contract IERC1155ERC721)"
                          }
                        },
                        "id": 7795,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "29877:30:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1155ERC721_$8975",
                          "typeString": "contract IERC1155ERC721"
                        }
                      },
                      "id": 7796,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8955,
                      "src": "29877:35:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256) external"
                      }
                    },
                    "id": 7800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29877:68:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7801,
                  "nodeType": "ExpressionStatement",
                  "src": "29877:68:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7803,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7758,
                        "src": "29988:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 7804,
                        "name": "_issuer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7760,
                        "src": "30004:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7802,
                      "name": "LogVoucherSetFaultCancel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6599,
                      "src": "29963:24:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 7805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29963:49:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7806,
                  "nodeType": "EmitStatement",
                  "src": "29958:54:6"
                },
                {
                  "expression": {
                    "id": 7807,
                    "name": "remQty",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7780,
                    "src": "30032:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 7769,
                  "id": 7808,
                  "nodeType": "Return",
                  "src": "30025:13:6"
                }
              ]
            },
            "documentation": {
              "id": 7756,
              "nodeType": "StructuredDocumentation",
              "src": "29158:309:6",
              "text": " @notice Cancel/Fault transaction by the Seller, cancelling the remaining uncommitted voucher set so that seller prevents buyers from committing to vouchers for items no longer in exchange.\n @param _tokenIdSupply   ID of the voucher set\n @param _issuer   owner of the voucher"
            },
            "functionSelector": "455e42f2",
            "id": 7810,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7764,
                "modifierName": {
                  "id": 7763,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "29592:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "29592:14:6"
              },
              {
                "id": 7766,
                "modifierName": {
                  "id": 7765,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11999,
                  "src": "29616:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "29616:13:6"
              }
            ],
            "name": "cancelOrFaultVoucherSet",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7762,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "29574:8:6"
            },
            "parameters": {
              "id": 7761,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7758,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 7810,
                  "src": "29506:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7757,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29506:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7760,
                  "mutability": "mutable",
                  "name": "_issuer",
                  "nodeType": "VariableDeclaration",
                  "scope": 7810,
                  "src": "29530:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7759,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "29530:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29505:41:6"
            },
            "returnParameters": {
              "id": 7769,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7768,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 7810,
                  "src": "29648:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7767,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29648:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "29647:9:6"
            },
            "scope": 8535,
            "src": "29473:573:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9347
            ],
            "body": {
              "id": 7838,
              "nodeType": "Block",
              "src": "30398:277:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7822,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 7820,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7813,
                          "src": "30417:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 7821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "30436:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "30417:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4944",
                        "id": 7823,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "30439:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        },
                        "value": "UNSPECIFIED_ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        }
                      ],
                      "id": 7819,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "30409:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7824,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30409:47:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7825,
                  "nodeType": "ExpressionStatement",
                  "src": "30409:47:6"
                },
                {
                  "expression": {
                    "id": 7831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7826,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "30557:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7828,
                        "indexExpression": {
                          "id": 7827,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7813,
                          "src": "30572:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "30557:31:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7829,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isPaymentReleased",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6261,
                      "src": "30557:49:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 7830,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30609:4:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "30557:56:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7832,
                  "nodeType": "ExpressionStatement",
                  "src": "30557:56:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7834,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7813,
                        "src": "30648:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 7835,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "30665:1:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 7833,
                      "name": "LogFundsReleased",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6605,
                      "src": "30631:16:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint8_$returns$__$",
                        "typeString": "function (uint256,uint8)"
                      }
                    },
                    "id": 7836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30631:36:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7837,
                  "nodeType": "EmitStatement",
                  "src": "30626:41:6"
                }
              ]
            },
            "documentation": {
              "id": 7811,
              "nodeType": "StructuredDocumentation",
              "src": "30139:134:6",
              "text": " @notice Mark voucher token that the payment was released\n @param _tokenIdVoucher   ID of the voucher token"
            },
            "functionSelector": "75549516",
            "id": 7839,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7817,
                "modifierName": {
                  "id": 7816,
                  "name": "onlyFromCashier",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6649,
                  "src": "30377:15:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "30377:15:6"
              }
            ],
            "name": "setPaymentReleased",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7815,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "30359:8:6"
            },
            "parameters": {
              "id": 7814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7813,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 7839,
                  "src": "30307:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7812,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30307:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30306:25:6"
            },
            "returnParameters": {
              "id": 7818,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30398:0:6"
            },
            "scope": 8535,
            "src": "30279:396:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9353
            ],
            "body": {
              "id": 7867,
              "nodeType": "Block",
              "src": "30945:278:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 7849,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7842,
                          "src": "30964:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 7850,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "30983:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "30964:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4944",
                        "id": 7852,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "30986:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        },
                        "value": "UNSPECIFIED_ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        }
                      ],
                      "id": 7848,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "30956:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7853,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30956:47:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7854,
                  "nodeType": "ExpressionStatement",
                  "src": "30956:47:6"
                },
                {
                  "expression": {
                    "id": 7860,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 7855,
                          "name": "vouchersStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6463,
                          "src": "31104:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                            "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                          }
                        },
                        "id": 7857,
                        "indexExpression": {
                          "id": 7856,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7842,
                          "src": "31119:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "31104:31:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                          "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                        }
                      },
                      "id": 7858,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isDepositsReleased",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6263,
                      "src": "31104:50:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 7859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31157:4:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "31104:57:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7861,
                  "nodeType": "ExpressionStatement",
                  "src": "31104:57:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 7863,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7842,
                        "src": "31196:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "31",
                        "id": 7864,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "31213:1:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 7862,
                      "name": "LogFundsReleased",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6605,
                      "src": "31179:16:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint8_$returns$__$",
                        "typeString": "function (uint256,uint8)"
                      }
                    },
                    "id": 7865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31179:36:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7866,
                  "nodeType": "EmitStatement",
                  "src": "31174:41:6"
                }
              ]
            },
            "documentation": {
              "id": 7840,
              "nodeType": "StructuredDocumentation",
              "src": "30683:136:6",
              "text": " @notice Mark voucher token that the deposits were released\n @param _tokenIdVoucher   ID of the voucher token"
            },
            "functionSelector": "ebba1b29",
            "id": 7868,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 7846,
                "modifierName": {
                  "id": 7845,
                  "name": "onlyFromCashier",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6649,
                  "src": "30924:15:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "30924:15:6"
              }
            ],
            "name": "setDepositsReleased",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7844,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "30906:8:6"
            },
            "parameters": {
              "id": 7843,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7842,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 7868,
                  "src": "30854:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7841,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30854:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30853:25:6"
            },
            "returnParameters": {
              "id": 7847,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30945:0:6"
            },
            "scope": 8535,
            "src": "30825:398:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9423
            ],
            "body": {
              "id": 7923,
              "nodeType": "Block",
              "src": "31422:660:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 7876,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7871,
                          "src": "31441:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 7877,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "31460:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "31441:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4944",
                        "id": 7879,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "31463:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        },
                        "value": "UNSPECIFIED_ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        }
                      ],
                      "id": 7875,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "31433:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31433:47:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7881,
                  "nodeType": "ExpressionStatement",
                  "src": "31433:47:6"
                },
                {
                  "assignments": [
                    7883
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7883,
                      "mutability": "mutable",
                      "name": "tPromise",
                      "nodeType": "VariableDeclaration",
                      "scope": 7923,
                      "src": "31583:23:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                        "typeString": "struct VoucherKernel.Promise"
                      },
                      "typeName": {
                        "id": 7882,
                        "name": "Promise",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6429,
                        "src": "31583:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Promise_$6429_storage_ptr",
                          "typeString": "struct VoucherKernel.Promise"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7889,
                  "initialValue": {
                    "baseExpression": {
                      "id": 7884,
                      "name": "promises",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6444,
                      "src": "31622:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                        "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                      }
                    },
                    "id": 7888,
                    "indexExpression": {
                      "arguments": [
                        {
                          "id": 7886,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7871,
                          "src": "31657:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7885,
                        "name": "getPromiseIdFromVoucherId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8260,
                        "src": "31631:25:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (uint256) view returns (bytes32)"
                        }
                      },
                      "id": 7887,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31631:42:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "31622:52:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                      "typeString": "struct VoucherKernel.Promise storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31583:91:6"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 7901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 7894,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 7890,
                          "name": "tPromise",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7883,
                          "src": "31705:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                            "typeString": "struct VoucherKernel.Promise memory"
                          }
                        },
                        "id": 7891,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "validTo",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6420,
                        "src": "31705:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "expression": {
                          "id": 7892,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "31724:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 7893,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "31724:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "31705:34:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "baseExpression": {
                              "id": 7896,
                              "name": "vouchersStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6463,
                              "src": "31773:14:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                              }
                            },
                            "id": 7898,
                            "indexExpression": {
                              "id": 7897,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7871,
                              "src": "31788:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "31773:31:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                              "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                            }
                          },
                          "id": 7899,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6259,
                          "src": "31773:38:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 7895,
                        "name": "isStateCommitted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6284,
                        "src": "31756:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                          "typeString": "function (uint8) pure returns (bool)"
                        }
                      },
                      "id": 7900,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31756:56:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "31705:107:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 7922,
                  "nodeType": "IfStatement",
                  "src": "31687:388:6",
                  "trueBody": {
                    "id": 7921,
                    "nodeType": "Block",
                    "src": "31824:251:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 7913,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 7902,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "31839:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 7904,
                              "indexExpression": {
                                "id": 7903,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7871,
                                "src": "31854:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "31839:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 7905,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "status",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6259,
                            "src": "31839:38:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "baseExpression": {
                                    "id": 7907,
                                    "name": "vouchersStatus",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6463,
                                    "src": "31908:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                      "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                    }
                                  },
                                  "id": 7909,
                                  "indexExpression": {
                                    "id": 7908,
                                    "name": "_tokenIdVoucher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7871,
                                    "src": "31923:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "31908:31:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                    "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                  }
                                },
                                "id": 7910,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "status",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6259,
                                "src": "31908:38:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "id": 7911,
                                "name": "IDX_EXPIRE",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6205,
                                "src": "31965:10:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 7906,
                              "name": "setChange",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6379,
                              "src": "31880:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                                "typeString": "function (uint8,uint8) pure returns (uint8)"
                              }
                            },
                            "id": 7912,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31880:110:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "31839:151:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 7914,
                        "nodeType": "ExpressionStatement",
                        "src": "31839:151:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 7916,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7871,
                              "src": "32035:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 7917,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "32052:3:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7918,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "32052:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 7915,
                            "name": "LogExpirationTriggered",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6563,
                            "src": "32012:22:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (uint256,address)"
                            }
                          },
                          "id": 7919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32012:51:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7920,
                        "nodeType": "EmitStatement",
                        "src": "32007:56:6"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 7869,
              "nodeType": "StructuredDocumentation",
              "src": "31231:115:6",
              "text": " @notice Mark voucher token as expired\n @param _tokenIdVoucher   ID of the voucher token"
            },
            "functionSelector": "d40ffcf8",
            "id": 7924,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "triggerExpiration",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7873,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "31413:8:6"
            },
            "parameters": {
              "id": 7872,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7871,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 7924,
                  "src": "31379:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7870,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31379:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "31378:25:6"
            },
            "returnParameters": {
              "id": 7874,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31422:0:6"
            },
            "scope": 8535,
            "src": "31352:730:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9429
            ],
            "body": {
              "id": 8077,
              "nodeType": "Block",
              "src": "32295:2180:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 7934,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 7932,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7927,
                          "src": "32314:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 7933,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "32333:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "32314:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4944",
                        "id": 7935,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32336:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        },
                        "value": "UNSPECIFIED_ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        }
                      ],
                      "id": 7931,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "32306:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7936,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32306:47:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7937,
                  "nodeType": "ExpressionStatement",
                  "src": "32306:47:6"
                },
                {
                  "assignments": [
                    7939
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7939,
                      "mutability": "mutable",
                      "name": "tStatus",
                      "nodeType": "VariableDeclaration",
                      "scope": 8077,
                      "src": "32456:13:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 7938,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "32456:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7944,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 7940,
                        "name": "vouchersStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6463,
                        "src": "32472:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                          "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                        }
                      },
                      "id": 7942,
                      "indexExpression": {
                        "id": 7941,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7927,
                        "src": "32487:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "32472:31:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                        "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                      }
                    },
                    "id": 7943,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "status",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6259,
                    "src": "32472:38:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32456:54:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 7950,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "32531:29:6",
                        "subExpression": {
                          "arguments": [
                            {
                              "id": 7947,
                              "name": "tStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7939,
                              "src": "32541:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 7948,
                              "name": "IDX_FINAL",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6214,
                              "src": "32550:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 7946,
                            "name": "isStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6361,
                            "src": "32532:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8,uint8) pure returns (bool)"
                            }
                          },
                          "id": 7949,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32532:28:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "414c52454144595f46494e414c495a4544",
                        "id": 7951,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32562:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a84b963af821bd2b41d802daa2c7840123c5cf834cde12aa10bdce75ff0df2d9",
                          "typeString": "literal_string \"ALREADY_FINALIZED\""
                        },
                        "value": "ALREADY_FINALIZED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a84b963af821bd2b41d802daa2c7840123c5cf834cde12aa10bdce75ff0df2d9",
                          "typeString": "literal_string \"ALREADY_FINALIZED\""
                        }
                      ],
                      "id": 7945,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "32523:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7952,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32523:59:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7953,
                  "nodeType": "ExpressionStatement",
                  "src": "32523:59:6"
                },
                {
                  "assignments": [
                    7955
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7955,
                      "mutability": "mutable",
                      "name": "mark",
                      "nodeType": "VariableDeclaration",
                      "scope": 8077,
                      "src": "32677:9:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 7954,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "32677:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7956,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32677:9:6"
                },
                {
                  "assignments": [
                    7958
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7958,
                      "mutability": "mutable",
                      "name": "tPromise",
                      "nodeType": "VariableDeclaration",
                      "scope": 8077,
                      "src": "32697:23:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                        "typeString": "struct VoucherKernel.Promise"
                      },
                      "typeName": {
                        "id": 7957,
                        "name": "Promise",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6429,
                        "src": "32697:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Promise_$6429_storage_ptr",
                          "typeString": "struct VoucherKernel.Promise"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 7964,
                  "initialValue": {
                    "baseExpression": {
                      "id": 7959,
                      "name": "promises",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6444,
                      "src": "32736:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                        "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                      }
                    },
                    "id": 7963,
                    "indexExpression": {
                      "arguments": [
                        {
                          "id": 7961,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7927,
                          "src": "32771:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 7960,
                        "name": "getPromiseIdFromVoucherId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8260,
                        "src": "32745:25:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (uint256) view returns (bytes32)"
                        }
                      },
                      "id": 7962,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "32745:42:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "32736:52:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                      "typeString": "struct VoucherKernel.Promise storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32697:91:6"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 7966,
                        "name": "tStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7939,
                        "src": "32814:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 7967,
                        "name": "IDX_COMPLAIN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6208,
                        "src": "32823:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 7965,
                      "name": "isStatus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6361,
                      "src": "32805:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                        "typeString": "function (uint8,uint8) pure returns (bool)"
                      }
                    },
                    "id": 7968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32805:31:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 8008,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 7996,
                            "name": "tStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7939,
                            "src": "33315:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          {
                            "id": 7997,
                            "name": "IDX_CANCEL_FAULT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6211,
                            "src": "33324:16:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          ],
                          "id": 7995,
                          "name": "isStatus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6361,
                          "src": "33306:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                            "typeString": "function (uint8,uint8) pure returns (bool)"
                          }
                        },
                        "id": 7998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "33306:35:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8007,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 7999,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "33358:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8000,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "33358:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 8001,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "33390:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 8003,
                              "indexExpression": {
                                "id": 8002,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7927,
                                "src": "33405:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "33390:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 8004,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "complainPeriodStart",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6265,
                            "src": "33390:51:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 8005,
                            "name": "complainPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6507,
                            "src": "33444:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "33390:68:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "33358:100:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "33306:152:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8020,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 8015,
                              "name": "tStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7939,
                              "src": "33612:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 8014,
                            "name": "isStateRedemptionSigned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6303,
                            "src": "33588:23:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8) pure returns (bool)"
                            }
                          },
                          "id": 8016,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33588:32:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 8018,
                              "name": "tStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7939,
                              "src": "33640:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 8017,
                            "name": "isStateRefunded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6322,
                            "src": "33624:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8) pure returns (bool)"
                            }
                          },
                          "id": 8019,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33624:24:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "33588:60:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "arguments": [
                            {
                              "id": 8038,
                              "name": "tStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7939,
                              "src": "34015:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 8037,
                            "name": "isStateExpired",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6341,
                            "src": "34000:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8) pure returns (bool)"
                            }
                          },
                          "id": 8039,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "34000:23:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8054,
                        "nodeType": "IfStatement",
                        "src": "33996:237:6",
                        "trueBody": {
                          "id": 8053,
                          "nodeType": "Block",
                          "src": "34025:208:6",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8046,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 8040,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "34122:5:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 8041,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "34122:15:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8045,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 8042,
                                      "name": "tPromise",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7958,
                                      "src": "34141:8:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                                        "typeString": "struct VoucherKernel.Promise memory"
                                      }
                                    },
                                    "id": 8043,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "validTo",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6420,
                                    "src": "34141:16:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "id": 8044,
                                    "name": "complainPeriod",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6507,
                                    "src": "34160:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "34141:33:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "34122:52:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8052,
                              "nodeType": "IfStatement",
                              "src": "34118:104:6",
                              "trueBody": {
                                "id": 8051,
                                "nodeType": "Block",
                                "src": "34176:46:6",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 8049,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 8047,
                                        "name": "mark",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7955,
                                        "src": "34195:4:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "hexValue": "74727565",
                                        "id": 8048,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "34202:4:6",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "value": "true"
                                      },
                                      "src": "34195:11:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 8050,
                                    "nodeType": "ExpressionStatement",
                                    "src": "34195:11:6"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      },
                      "id": 8055,
                      "nodeType": "IfStatement",
                      "src": "33570:663:6",
                      "trueBody": {
                        "id": 8036,
                        "nodeType": "Block",
                        "src": "33660:330:6",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8029,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 8021,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "33792:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 8022,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "33792:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8028,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 8023,
                                      "name": "vouchersStatus",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6463,
                                      "src": "33828:14:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                        "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                      }
                                    },
                                    "id": 8025,
                                    "indexExpression": {
                                      "id": 8024,
                                      "name": "_tokenIdVoucher",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7927,
                                      "src": "33843:15:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "33828:31:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                      "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                    }
                                  },
                                  "id": 8026,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "complainPeriodStart",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6265,
                                  "src": "33828:51:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 8027,
                                  "name": "complainPeriod",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6507,
                                  "src": "33903:14:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "33828:89:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "33792:125:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 8035,
                            "nodeType": "IfStatement",
                            "src": "33770:209:6",
                            "trueBody": {
                              "id": 8034,
                              "nodeType": "Block",
                              "src": "33933:46:6",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 8032,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 8030,
                                      "name": "mark",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7955,
                                      "src": "33952:4:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "hexValue": "74727565",
                                      "id": 8031,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "33959:4:6",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "true"
                                    },
                                    "src": "33952:11:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 8033,
                                  "nodeType": "ExpressionStatement",
                                  "src": "33952:11:6"
                                }
                              ]
                            }
                          }
                        ]
                      }
                    },
                    "id": 8056,
                    "nodeType": "IfStatement",
                    "src": "33288:945:6",
                    "trueBody": {
                      "id": 8013,
                      "nodeType": "Block",
                      "src": "33470:94:6",
                      "statements": [
                        {
                          "expression": {
                            "id": 8011,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 8009,
                              "name": "mark",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7955,
                              "src": "33541:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "hexValue": "74727565",
                              "id": 8010,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "33548:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            "src": "33541:11:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 8012,
                          "nodeType": "ExpressionStatement",
                          "src": "33541:11:6"
                        }
                      ]
                    }
                  },
                  "id": 8057,
                  "nodeType": "IfStatement",
                  "src": "32801:1432:6",
                  "trueBody": {
                    "id": 7994,
                    "nodeType": "Block",
                    "src": "32838:444:6",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 7970,
                              "name": "tStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7939,
                              "src": "32866:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 7971,
                              "name": "IDX_CANCEL_FAULT",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6211,
                              "src": "32875:16:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 7969,
                            "name": "isStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6361,
                            "src": "32857:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_bool_$",
                              "typeString": "function (uint8,uint8) pure returns (bool)"
                            }
                          },
                          "id": 7972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32857:35:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7986,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 7978,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "33018:5:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 7979,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "33018:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7985,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 7980,
                                    "name": "vouchersStatus",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6463,
                                    "src": "33054:14:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                      "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                    }
                                  },
                                  "id": 7982,
                                  "indexExpression": {
                                    "id": 7981,
                                    "name": "_tokenIdVoucher",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7927,
                                    "src": "33069:15:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "33054:31:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                    "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                                  }
                                },
                                "id": 7983,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "cancelFaultPeriodStart",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6267,
                                "src": "33054:54:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "id": 7984,
                                "name": "cancelFaultPeriod",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6509,
                                "src": "33132:17:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "33054:95:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "33018:131:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 7992,
                          "nodeType": "IfStatement",
                          "src": "32996:275:6",
                          "trueBody": {
                            "id": 7991,
                            "nodeType": "Block",
                            "src": "33165:106:6",
                            "statements": [
                              {
                                "expression": {
                                  "id": 7989,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 7987,
                                    "name": "mark",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7955,
                                    "src": "33244:4:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "hexValue": "74727565",
                                    "id": 7988,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "33251:4:6",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  },
                                  "src": "33244:11:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "id": 7990,
                                "nodeType": "ExpressionStatement",
                                "src": "33244:11:6"
                              }
                            ]
                          }
                        },
                        "id": 7993,
                        "nodeType": "IfStatement",
                        "src": "32853:418:6",
                        "trueBody": {
                          "id": 7977,
                          "nodeType": "Block",
                          "src": "32894:96:6",
                          "statements": [
                            {
                              "expression": {
                                "id": 7975,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 7973,
                                  "name": "mark",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7955,
                                  "src": "32963:4:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "74727565",
                                  "id": 7974,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "32970:4:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "32963:11:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 7976,
                              "nodeType": "ExpressionStatement",
                              "src": "32963:11:6"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "id": 8058,
                    "name": "mark",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 7955,
                    "src": "34249:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8076,
                  "nodeType": "IfStatement",
                  "src": "34245:223:6",
                  "trueBody": {
                    "id": 8075,
                    "nodeType": "Block",
                    "src": "34255:213:6",
                    "statements": [
                      {
                        "expression": {
                          "id": 8067,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 8059,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "34270:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 8061,
                              "indexExpression": {
                                "id": 8060,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7927,
                                "src": "34285:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "34270:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 8062,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "status",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6259,
                            "src": "34270:38:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8064,
                                "name": "tStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7939,
                                "src": "34339:7:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "id": 8065,
                                "name": "IDX_FINAL",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6214,
                                "src": "34365:9:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 8063,
                              "name": "setChange",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6379,
                              "src": "34311:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_uint8_$returns$_t_uint8_$",
                                "typeString": "function (uint8,uint8) pure returns (uint8)"
                              }
                            },
                            "id": 8066,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "34311:78:6",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "34270:119:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 8068,
                        "nodeType": "ExpressionStatement",
                        "src": "34270:119:6"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 8070,
                              "name": "_tokenIdVoucher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7927,
                              "src": "34428:15:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 8071,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "34445:3:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8072,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "34445:10:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 8069,
                            "name": "LogFinalizeVoucher",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6569,
                            "src": "34409:18:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (uint256,address)"
                            }
                          },
                          "id": 8073,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "34409:47:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8074,
                        "nodeType": "EmitStatement",
                        "src": "34404:52:6"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 7925,
              "nodeType": "StructuredDocumentation",
              "src": "32090:124:6",
              "text": " @notice Mark voucher token to the final status\n @param _tokenIdVoucher   ID of the voucher token"
            },
            "functionSelector": "65c303bc",
            "id": 8078,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "triggerFinalizeVoucher",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 7929,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "32286:8:6"
            },
            "parameters": {
              "id": 7928,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7927,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 8078,
                  "src": "32252:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7926,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32252:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "32251:25:6"
            },
            "returnParameters": {
              "id": 7930,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32295:0:6"
            },
            "scope": 8535,
            "src": "32220:2255:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9437
            ],
            "body": {
              "id": 8102,
              "nodeType": "Block",
              "src": "34948:120:6",
              "statements": [
                {
                  "assignments": [
                    8090
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8090,
                      "mutability": "mutable",
                      "name": "promiseKey",
                      "nodeType": "VariableDeclaration",
                      "scope": 8102,
                      "src": "34959:18:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8089,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "34959:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8094,
                  "initialValue": {
                    "baseExpression": {
                      "id": 8091,
                      "name": "ordersPromise",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6459,
                      "src": "34980:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                        "typeString": "mapping(uint256 => bytes32)"
                      }
                    },
                    "id": 8093,
                    "indexExpression": {
                      "id": 8092,
                      "name": "_tokenIdSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8081,
                      "src": "34994:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "34980:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "34959:50:6"
                },
                {
                  "expression": {
                    "id": 8100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 8095,
                          "name": "promises",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6444,
                          "src": "35020:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                            "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                          }
                        },
                        "id": 8097,
                        "indexExpression": {
                          "id": 8096,
                          "name": "promiseKey",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8090,
                          "src": "35029:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "35020:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Promise_$6429_storage",
                          "typeString": "struct VoucherKernel.Promise storage ref"
                        }
                      },
                      "id": 8098,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "seller",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6416,
                      "src": "35020:27:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8099,
                      "name": "_newSeller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8083,
                      "src": "35050:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "35020:40:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8101,
                  "nodeType": "ExpressionStatement",
                  "src": "35020:40:6"
                }
              ]
            },
            "documentation": {
              "id": 8079,
              "nodeType": "StructuredDocumentation",
              "src": "34585:220:6",
              "text": " @notice Set the address of the new holder of a _tokenIdSupply on transfer\n @param _tokenIdSupply   _tokenIdSupply which will be transferred\n @param _newSeller   new holder of the supply"
            },
            "functionSelector": "88c25607",
            "id": 8103,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8087,
                "modifierName": {
                  "id": 8086,
                  "name": "onlyFromRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6627,
                  "src": "34933:14:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "34933:14:6"
              }
            ],
            "name": "setSupplyHolderOnTransfer",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8085,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "34924:8:6"
            },
            "parameters": {
              "id": 8084,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8081,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8103,
                  "src": "34856:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8080,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34856:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8083,
                  "mutability": "mutable",
                  "name": "_newSeller",
                  "nodeType": "VariableDeclaration",
                  "scope": 8103,
                  "src": "34889:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8082,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "34889:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "34845:69:6"
            },
            "returnParameters": {
              "id": 8088,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "34948:0:6"
            },
            "scope": 8535,
            "src": "34811:257:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 8131,
              "nodeType": "Block",
              "src": "35325:295:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8117,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 8112,
                          "name": "_bosonRouterAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8106,
                          "src": "35344:19:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 8115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "35375:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 8114,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "35367:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 8113,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "35367:7:6",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "35367:10:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "35344:33:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 8118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "35379:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 8111,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "35336:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35336:65:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8120,
                  "nodeType": "ExpressionStatement",
                  "src": "35336:65:6"
                },
                {
                  "expression": {
                    "id": 8123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8121,
                      "name": "bosonRouterAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6438,
                      "src": "35504:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8122,
                      "name": "_bosonRouterAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8106,
                      "src": "35525:19:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "35504:40:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8124,
                  "nodeType": "ExpressionStatement",
                  "src": "35504:40:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8126,
                        "name": "_bosonRouterAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8106,
                        "src": "35580:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 8127,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "35601:3:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8128,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "35601:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 8125,
                      "name": "LogBosonRouterSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6575,
                      "src": "35562:17:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 8129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35562:50:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8130,
                  "nodeType": "EmitStatement",
                  "src": "35557:55:6"
                }
              ]
            },
            "documentation": {
              "id": 8104,
              "nodeType": "StructuredDocumentation",
              "src": "35076:141:6",
              "text": " @notice Set the address of the Boson Router contract\n @param _bosonRouterAddress   The address of the BR contract"
            },
            "functionSelector": "bd17de40",
            "id": 8132,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8109,
                "modifierName": {
                  "id": 8108,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10443,
                  "src": "35310:9:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "35310:9:6"
              }
            ],
            "name": "setBosonRouterAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8107,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8106,
                  "mutability": "mutable",
                  "name": "_bosonRouterAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 8132,
                  "src": "35254:27:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8105,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "35254:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "35253:29:6"
            },
            "returnParameters": {
              "id": 8110,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "35325:0:6"
            },
            "scope": 8535,
            "src": "35223:397:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9449
            ],
            "body": {
              "id": 8161,
              "nodeType": "Block",
              "src": "35878:275:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8147,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 8142,
                          "name": "_cashierAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8135,
                          "src": "35897:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 8145,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "35924:1:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 8144,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "35916:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 8143,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "35916:7:6",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "35916:10:6",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "35897:29:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f41444452455353",
                        "id": 8148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "35928:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        },
                        "value": "UNSPECIFIED_ADDRESS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b8329b0a2cdc38ce16c5ce6fddd2481adcbf4e0ca41d3558c248e38716ca1d7",
                          "typeString": "literal_string \"UNSPECIFIED_ADDRESS\""
                        }
                      ],
                      "id": 8141,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "35889:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35889:61:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8150,
                  "nodeType": "ExpressionStatement",
                  "src": "35889:61:6"
                },
                {
                  "expression": {
                    "id": 8153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8151,
                      "name": "cashierAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6440,
                      "src": "36053:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8152,
                      "name": "_cashierAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8135,
                      "src": "36070:15:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "36053:32:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8154,
                  "nodeType": "ExpressionStatement",
                  "src": "36053:32:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8156,
                        "name": "_cashierAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8135,
                        "src": "36117:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 8157,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "36134:3:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "36134:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 8155,
                      "name": "LogCashierSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6581,
                      "src": "36103:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 8159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36103:42:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8160,
                  "nodeType": "EmitStatement",
                  "src": "36098:47:6"
                }
              ]
            },
            "documentation": {
              "id": 8133,
              "nodeType": "StructuredDocumentation",
              "src": "35628:132:6",
              "text": " @notice Set the address of the Cashier contract\n @param _cashierAddress   The address of the BR contract"
            },
            "functionSelector": "c099a7c4",
            "id": 8162,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8139,
                "modifierName": {
                  "id": 8138,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10443,
                  "src": "35863:9:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "35863:9:6"
              }
            ],
            "name": "setCashierAddress",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8137,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "35845:8:6"
            },
            "parameters": {
              "id": 8136,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8135,
                  "mutability": "mutable",
                  "name": "_cashierAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 8162,
                  "src": "35793:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8134,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "35793:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "35792:25:6"
            },
            "returnParameters": {
              "id": 8140,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "35878:0:6"
            },
            "scope": 8535,
            "src": "35766:387:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9455
            ],
            "body": {
              "id": 8181,
              "nodeType": "Block",
              "src": "36527:122:6",
              "statements": [
                {
                  "expression": {
                    "id": 8173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8171,
                      "name": "complainPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6507,
                      "src": "36538:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8172,
                      "name": "_complainPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8165,
                      "src": "36555:15:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "36538:32:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8174,
                  "nodeType": "ExpressionStatement",
                  "src": "36538:32:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8176,
                        "name": "_complainPeriod",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8165,
                        "src": "36613:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 8177,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "36630:3:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "36630:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 8175,
                      "name": "LogComplainPeriodChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6587,
                      "src": "36588:24:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 8179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36588:53:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8180,
                  "nodeType": "EmitStatement",
                  "src": "36583:58:6"
                }
              ]
            },
            "documentation": {
              "id": 8163,
              "nodeType": "StructuredDocumentation",
              "src": "36161:248:6",
              "text": " @notice Set the general complain period, should be used sparingly as it has significant consequences. Here done simply for demo purposes.\n @param _complainPeriod   the new value for complain period (in number of seconds)"
            },
            "functionSelector": "8990834b",
            "id": 8182,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8169,
                "modifierName": {
                  "id": 8168,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10443,
                  "src": "36512:9:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "36512:9:6"
              }
            ],
            "name": "setComplainPeriod",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8167,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "36494:8:6"
            },
            "parameters": {
              "id": 8166,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8165,
                  "mutability": "mutable",
                  "name": "_complainPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 8182,
                  "src": "36442:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8164,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36442:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "36441:25:6"
            },
            "returnParameters": {
              "id": 8170,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "36527:0:6"
            },
            "scope": 8535,
            "src": "36415:234:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9443
            ],
            "body": {
              "id": 8201,
              "nodeType": "Block",
              "src": "37042:134:6",
              "statements": [
                {
                  "expression": {
                    "id": 8193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8191,
                      "name": "cancelFaultPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6509,
                      "src": "37053:17:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 8192,
                      "name": "_cancelFaultPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8185,
                      "src": "37073:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "37053:38:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8194,
                  "nodeType": "ExpressionStatement",
                  "src": "37053:38:6"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 8196,
                        "name": "_cancelFaultPeriod",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8185,
                        "src": "37137:18:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 8197,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "37157:3:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8198,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "37157:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 8195,
                      "name": "LogCancelFaultPeriodChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6593,
                      "src": "37109:27:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address)"
                      }
                    },
                    "id": 8199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "37109:59:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8200,
                  "nodeType": "EmitStatement",
                  "src": "37104:64:6"
                }
              ]
            },
            "documentation": {
              "id": 8183,
              "nodeType": "StructuredDocumentation",
              "src": "36657:261:6",
              "text": " @notice Set the general cancelOrFault period, should be used sparingly as it has significant consequences. Here done simply for demo purposes.\n @param _cancelFaultPeriod   the new value for cancelOrFault period (in number of seconds)"
            },
            "functionSelector": "ede80897",
            "id": 8202,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 8189,
                "modifierName": {
                  "id": 8188,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 10443,
                  "src": "37027:9:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "37027:9:6"
              }
            ],
            "name": "setCancelFaultPeriod",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8187,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "37009:8:6"
            },
            "parameters": {
              "id": 8186,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8185,
                  "mutability": "mutable",
                  "name": "_cancelFaultPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 8202,
                  "src": "36954:26:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8184,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "36954:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "36953:28:6"
            },
            "returnParameters": {
              "id": 8190,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "37042:0:6"
            },
            "scope": 8535,
            "src": "36924:252:6",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9463
            ],
            "body": {
              "id": 8215,
              "nodeType": "Block",
              "src": "37536:43:6",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 8211,
                      "name": "promiseKeys",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6455,
                      "src": "37554:11:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                        "typeString": "bytes32[] storage ref"
                      }
                    },
                    "id": 8213,
                    "indexExpression": {
                      "id": 8212,
                      "name": "_idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8205,
                      "src": "37566:4:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "37554:17:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 8210,
                  "id": 8214,
                  "nodeType": "Return",
                  "src": "37547:24:6"
                }
              ]
            },
            "documentation": {
              "id": 8203,
              "nodeType": "StructuredDocumentation",
              "src": "37260:153:6",
              "text": " @notice Get the promise ID at specific index\n @param _idx  Index in the array of promise keys\n @return      Promise ID"
            },
            "functionSelector": "81dc8119",
            "id": 8216,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPromiseKey",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8207,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "37495:8:6"
            },
            "parameters": {
              "id": 8206,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8205,
                  "mutability": "mutable",
                  "name": "_idx",
                  "nodeType": "VariableDeclaration",
                  "scope": 8216,
                  "src": "37442:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8204,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "37442:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37441:14:6"
            },
            "returnParameters": {
              "id": 8210,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8209,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8216,
                  "src": "37522:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8208,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "37522:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37521:9:6"
            },
            "scope": 8535,
            "src": "37419:160:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9505
            ],
            "body": {
              "id": 8229,
              "nodeType": "Block",
              "src": "37916:53:6",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 8225,
                      "name": "_tokenIdVoucher",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8219,
                      "src": "37934:15:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&",
                    "rightExpression": {
                      "id": 8226,
                      "name": "MASK_TYPE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6491,
                      "src": "37952:9:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "37934:27:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8224,
                  "id": 8228,
                  "nodeType": "Return",
                  "src": "37927:34:6"
                }
              ]
            },
            "documentation": {
              "id": 8217,
              "nodeType": "StructuredDocumentation",
              "src": "37587:186:6",
              "text": " @notice Get the supply token ID from a voucher token\n @param _tokenIdVoucher   ID of the voucher token\n @return                  ID of the supply token"
            },
            "functionSelector": "1af2a6a8",
            "id": 8230,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getIdSupplyFromVoucher",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8221,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "37875:8:6"
            },
            "parameters": {
              "id": 8220,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8219,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 8230,
                  "src": "37811:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8218,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "37811:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37810:25:6"
            },
            "returnParameters": {
              "id": 8224,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8223,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8230,
                  "src": "37902:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8222,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "37902:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37901:9:6"
            },
            "scope": 8535,
            "src": "37779:190:6",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9513
            ],
            "body": {
              "id": 8259,
              "nodeType": "Block",
              "src": "38299:298:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8242,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 8240,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8233,
                          "src": "38318:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 8241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "38337:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "38318:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "554e5350454349464945445f4944",
                        "id": 8243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "38340:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        },
                        "value": "UNSPECIFIED_ID"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f35c8917c84e713013d205a351659cc8635d01a4c8bf73192955c5548de51ae7",
                          "typeString": "literal_string \"UNSPECIFIED_ID\""
                        }
                      ],
                      "id": 8239,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "38310:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "38310:47:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8245,
                  "nodeType": "ExpressionStatement",
                  "src": "38310:47:6"
                },
                {
                  "assignments": [
                    8247
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8247,
                      "mutability": "mutable",
                      "name": "tokenIdSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 8259,
                      "src": "38460:21:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8246,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "38460:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8251,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8249,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8233,
                        "src": "38507:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8248,
                      "name": "getIdSupplyFromVoucher",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8230,
                      "src": "38484:22:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256)"
                      }
                    },
                    "id": 8250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "38484:39:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "38460:63:6"
                },
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 8252,
                        "name": "promises",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6444,
                        "src": "38541:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                          "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                        }
                      },
                      "id": 8256,
                      "indexExpression": {
                        "baseExpression": {
                          "id": 8253,
                          "name": "ordersPromise",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6459,
                          "src": "38550:13:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                            "typeString": "mapping(uint256 => bytes32)"
                          }
                        },
                        "id": 8255,
                        "indexExpression": {
                          "id": 8254,
                          "name": "tokenIdSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8247,
                          "src": "38564:13:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "38550:28:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "38541:38:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_storage",
                        "typeString": "struct VoucherKernel.Promise storage ref"
                      }
                    },
                    "id": 8257,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "promiseId",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6412,
                    "src": "38541:48:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 8238,
                  "id": 8258,
                  "nodeType": "Return",
                  "src": "38534:55:6"
                }
              ]
            },
            "documentation": {
              "id": 8231,
              "nodeType": "StructuredDocumentation",
              "src": "37977:176:6",
              "text": " @notice Get the promise ID from a voucher token\n @param _tokenIdVoucher   ID of the voucher token\n @return                  ID of the promise"
            },
            "functionSelector": "bc0d753d",
            "id": 8260,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPromiseIdFromVoucherId",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8235,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "38258:8:6"
            },
            "parameters": {
              "id": 8234,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8233,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 8260,
                  "src": "38194:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8232,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "38194:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "38193:25:6"
            },
            "returnParameters": {
              "id": 8238,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8237,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8260,
                  "src": "38285:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8236,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "38285:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "38284:9:6"
            },
            "scope": 8535,
            "src": "38159:438:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9535
            ],
            "body": {
              "id": 8279,
              "nodeType": "Block",
              "src": "39027:84:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8275,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8265,
                        "src": "39080:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 8276,
                        "name": "_tokenSupplyId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8263,
                        "src": "39088:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 8272,
                            "name": "tokensContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6410,
                            "src": "39054:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8271,
                          "name": "IERC1155",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8931,
                          "src": "39045:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC1155_$8931_$",
                            "typeString": "type(contract IERC1155)"
                          }
                        },
                        "id": 8273,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "39045:24:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1155_$8931",
                          "typeString": "contract IERC1155"
                        }
                      },
                      "id": 8274,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8899,
                      "src": "39045:34:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view external returns (uint256)"
                      }
                    },
                    "id": 8277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39045:58:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8270,
                  "id": 8278,
                  "nodeType": "Return",
                  "src": "39038:65:6"
                }
              ]
            },
            "documentation": {
              "id": 8261,
              "nodeType": "StructuredDocumentation",
              "src": "38605:268:6",
              "text": " @notice Get the remaining quantity left in supply of tokens (e.g ERC-721 left in ERC-1155) of an account\n @param _tokenSupplyId  Token supply ID\n @param _owner    holder of the Token Supply\n @return          remaining quantity"
            },
            "functionSelector": "e31a0079",
            "id": 8280,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRemQtyForSupply",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8267,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "38986:8:6"
            },
            "parameters": {
              "id": 8266,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8263,
                  "mutability": "mutable",
                  "name": "_tokenSupplyId",
                  "nodeType": "VariableDeclaration",
                  "scope": 8280,
                  "src": "38907:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8262,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "38907:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8265,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 8280,
                  "src": "38931:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8264,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "38931:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "38906:40:6"
            },
            "returnParameters": {
              "id": 8270,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8269,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8280,
                  "src": "39013:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8268,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39013:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "39012:9:6"
            },
            "scope": 8535,
            "src": "38879:232:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9525
            ],
            "body": {
              "id": 8313,
              "nodeType": "Block",
              "src": "39547:229:6",
              "statements": [
                {
                  "assignments": [
                    8294
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8294,
                      "mutability": "mutable",
                      "name": "promiseKey",
                      "nodeType": "VariableDeclaration",
                      "scope": 8313,
                      "src": "39558:18:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8293,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "39558:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8298,
                  "initialValue": {
                    "baseExpression": {
                      "id": 8295,
                      "name": "ordersPromise",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6459,
                      "src": "39579:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                        "typeString": "mapping(uint256 => bytes32)"
                      }
                    },
                    "id": 8297,
                    "indexExpression": {
                      "id": 8296,
                      "name": "_tokenIdSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8283,
                      "src": "39593:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "39579:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "39558:50:6"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8299,
                            "name": "promises",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6444,
                            "src": "39641:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                              "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                            }
                          },
                          "id": 8301,
                          "indexExpression": {
                            "id": 8300,
                            "name": "promiseKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8294,
                            "src": "39650:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "39641:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Promise_$6429_storage",
                            "typeString": "struct VoucherKernel.Promise storage ref"
                          }
                        },
                        "id": 8302,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "price",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6422,
                        "src": "39641:26:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8303,
                            "name": "promises",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6444,
                            "src": "39682:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                              "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                            }
                          },
                          "id": 8305,
                          "indexExpression": {
                            "id": 8304,
                            "name": "promiseKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8294,
                            "src": "39691:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "39682:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Promise_$6429_storage",
                            "typeString": "struct VoucherKernel.Promise storage ref"
                          }
                        },
                        "id": 8306,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "depositSe",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6424,
                        "src": "39682:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8307,
                            "name": "promises",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6444,
                            "src": "39727:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                              "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                            }
                          },
                          "id": 8309,
                          "indexExpression": {
                            "id": 8308,
                            "name": "promiseKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8294,
                            "src": "39736:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "39727:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Promise_$6429_storage",
                            "typeString": "struct VoucherKernel.Promise storage ref"
                          }
                        },
                        "id": 8310,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "depositBu",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6426,
                        "src": "39727:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 8311,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "39626:142:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 8292,
                  "id": 8312,
                  "nodeType": "Return",
                  "src": "39619:149:6"
                }
              ]
            },
            "documentation": {
              "id": 8281,
              "nodeType": "StructuredDocumentation",
              "src": "39119:227:6",
              "text": " @notice Get all necessary funds for a supply token\n @param _tokenIdSupply   ID of the supply token\n @return                  returns a tuple (Payment amount, Seller's deposit, Buyer's deposit)"
            },
            "functionSelector": "d887b4e7",
            "id": 8314,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getOrderCosts",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8285,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "39438:8:6"
            },
            "parameters": {
              "id": 8284,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8283,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8314,
                  "src": "39375:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8282,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39375:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "39374:24:6"
            },
            "returnParameters": {
              "id": 8292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8287,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8314,
                  "src": "39479:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8286,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39479:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8289,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8314,
                  "src": "39501:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39501:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8291,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8314,
                  "src": "39523:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "39523:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "39464:77:6"
            },
            "scope": 8535,
            "src": "39352:424:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9489
            ],
            "body": {
              "id": 8341,
              "nodeType": "Block",
              "src": "40158:147:6",
              "statements": [
                {
                  "assignments": [
                    8326
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8326,
                      "mutability": "mutable",
                      "name": "promiseKey",
                      "nodeType": "VariableDeclaration",
                      "scope": 8341,
                      "src": "40169:18:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8325,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "40169:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8330,
                  "initialValue": {
                    "baseExpression": {
                      "id": 8327,
                      "name": "ordersPromise",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6459,
                      "src": "40190:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                        "typeString": "mapping(uint256 => bytes32)"
                      }
                    },
                    "id": 8329,
                    "indexExpression": {
                      "id": 8328,
                      "name": "_tokenIdSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8317,
                      "src": "40204:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "40190:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "40169:50:6"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8331,
                            "name": "promises",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6444,
                            "src": "40238:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                              "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                            }
                          },
                          "id": 8333,
                          "indexExpression": {
                            "id": 8332,
                            "name": "promiseKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8326,
                            "src": "40247:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "40238:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Promise_$6429_storage",
                            "typeString": "struct VoucherKernel.Promise storage ref"
                          }
                        },
                        "id": 8334,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "price",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6422,
                        "src": "40238:26:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8335,
                            "name": "promises",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6444,
                            "src": "40266:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                              "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                            }
                          },
                          "id": 8337,
                          "indexExpression": {
                            "id": 8336,
                            "name": "promiseKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8326,
                            "src": "40275:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "40266:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Promise_$6429_storage",
                            "typeString": "struct VoucherKernel.Promise storage ref"
                          }
                        },
                        "id": 8338,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "depositBu",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6426,
                        "src": "40266:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 8339,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "40237:60:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 8324,
                  "id": 8340,
                  "nodeType": "Return",
                  "src": "40230:67:6"
                }
              ]
            },
            "documentation": {
              "id": 8315,
              "nodeType": "StructuredDocumentation",
              "src": "39784:227:6",
              "text": " @notice Get Buyer costs required to make an order for a supply token\n @param _tokenIdSupply   ID of the supply token\n @return                  returns a tuple (Payment amount, Buyer's deposit)"
            },
            "functionSelector": "fad4ee94",
            "id": 8342,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getBuyerOrderCosts",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8319,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "40108:8:6"
            },
            "parameters": {
              "id": 8318,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8317,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "40045:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8316,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40045:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "40044:24:6"
            },
            "returnParameters": {
              "id": 8324,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8321,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "40135:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8320,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40135:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8323,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "40144:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8322,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40144:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "40134:18:6"
            },
            "scope": 8535,
            "src": "40017:288:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9497
            ],
            "body": {
              "id": 8362,
              "nodeType": "Block",
              "src": "40608:117:6",
              "statements": [
                {
                  "assignments": [
                    8352
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8352,
                      "mutability": "mutable",
                      "name": "promiseKey",
                      "nodeType": "VariableDeclaration",
                      "scope": 8362,
                      "src": "40619:18:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8351,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "40619:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8356,
                  "initialValue": {
                    "baseExpression": {
                      "id": 8353,
                      "name": "ordersPromise",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6459,
                      "src": "40640:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                        "typeString": "mapping(uint256 => bytes32)"
                      }
                    },
                    "id": 8355,
                    "indexExpression": {
                      "id": 8354,
                      "name": "_tokenIdSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8345,
                      "src": "40654:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "40640:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "40619:50:6"
                },
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 8357,
                        "name": "promises",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6444,
                        "src": "40687:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                          "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                        }
                      },
                      "id": 8359,
                      "indexExpression": {
                        "id": 8358,
                        "name": "promiseKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8352,
                        "src": "40696:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "40687:20:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_storage",
                        "typeString": "struct VoucherKernel.Promise storage ref"
                      }
                    },
                    "id": 8360,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "depositSe",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6424,
                    "src": "40687:30:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8350,
                  "id": 8361,
                  "nodeType": "Return",
                  "src": "40680:37:6"
                }
              ]
            },
            "documentation": {
              "id": 8343,
              "nodeType": "StructuredDocumentation",
              "src": "40313:159:6",
              "text": " @notice Get Seller deposit\n @param _tokenIdSupply   ID of the supply token\n @return                  returns sellers deposit"
            },
            "functionSelector": "88106323",
            "id": 8363,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSellerDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8347,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "40567:8:6"
            },
            "parameters": {
              "id": 8346,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8345,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8363,
                  "src": "40504:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8344,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40504:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "40503:24:6"
            },
            "returnParameters": {
              "id": 8350,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8349,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8363,
                  "src": "40594:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8348,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40594:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "40593:9:6"
            },
            "scope": 8535,
            "src": "40478:247:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9555
            ],
            "body": {
              "id": 8390,
              "nodeType": "Block",
              "src": "41117:219:6",
              "statements": [
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8376,
                            "name": "vouchersStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6463,
                            "src": "41150:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                              "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                            }
                          },
                          "id": 8378,
                          "indexExpression": {
                            "id": 8377,
                            "name": "_tokenIdVoucher",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8366,
                            "src": "41165:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "41150:31:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                            "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                          }
                        },
                        "id": 8379,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "status",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6259,
                        "src": "41150:38:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8380,
                            "name": "vouchersStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6463,
                            "src": "41203:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                              "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                            }
                          },
                          "id": 8382,
                          "indexExpression": {
                            "id": 8381,
                            "name": "_tokenIdVoucher",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8366,
                            "src": "41218:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "41203:31:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                            "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                          }
                        },
                        "id": 8383,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isPaymentReleased",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6261,
                        "src": "41203:49:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 8384,
                            "name": "vouchersStatus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6463,
                            "src": "41267:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                              "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                            }
                          },
                          "id": 8386,
                          "indexExpression": {
                            "id": 8385,
                            "name": "_tokenIdVoucher",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8366,
                            "src": "41282:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "41267:31:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                            "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                          }
                        },
                        "id": 8387,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isDepositsReleased",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6263,
                        "src": "41267:50:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 8388,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "41135:193:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint8_$_t_bool_$_t_bool_$",
                      "typeString": "tuple(uint8,bool,bool)"
                    }
                  },
                  "functionReturnParameters": 8375,
                  "id": 8389,
                  "nodeType": "Return",
                  "src": "41128:200:6"
                }
              ]
            },
            "documentation": {
              "id": 8364,
              "nodeType": "StructuredDocumentation",
              "src": "40733:187:6",
              "text": " @notice Get the current status of a voucher\n @param _tokenIdVoucher   ID of the voucher token\n @return                  Status of the voucher (via enum)"
            },
            "functionSelector": "325a7a84",
            "id": 8391,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVoucherStatus",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8368,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "41016:8:6"
            },
            "parameters": {
              "id": 8367,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8366,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 8391,
                  "src": "40952:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8365,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40952:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "40951:25:6"
            },
            "returnParameters": {
              "id": 8375,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8370,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8391,
                  "src": "41057:5:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8369,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "41057:5:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8372,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8391,
                  "src": "41077:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8371,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "41077:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8374,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8391,
                  "src": "41096:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8373,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "41096:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "41042:69:6"
            },
            "scope": 8535,
            "src": "40926:410:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9571
            ],
            "body": {
              "id": 8407,
              "nodeType": "Block",
              "src": "41649:74:6",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8404,
                        "name": "_tokenIdVoucher",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8394,
                        "src": "41699:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 8401,
                            "name": "tokensContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6410,
                            "src": "41675:14:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8400,
                          "name": "IERC721",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9250,
                          "src": "41667:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC721_$9250_$",
                            "typeString": "type(contract IERC721)"
                          }
                        },
                        "id": 8402,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "41667:23:6",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC721_$9250",
                          "typeString": "contract IERC721"
                        }
                      },
                      "id": 8403,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ownerOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9183,
                      "src": "41667:31:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view external returns (address)"
                      }
                    },
                    "id": 8405,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "41667:48:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8399,
                  "id": 8406,
                  "nodeType": "Return",
                  "src": "41660:55:6"
                }
              ]
            },
            "documentation": {
              "id": 8392,
              "nodeType": "StructuredDocumentation",
              "src": "41344:168:6",
              "text": " @notice Get the holder of a voucher\n @param _tokenIdVoucher   ID of the voucher token\n @return                  Address of the holder"
            },
            "functionSelector": "f75951ce",
            "id": 8408,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVoucherHolder",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8396,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "41608:8:6"
            },
            "parameters": {
              "id": 8395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8394,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 8408,
                  "src": "41544:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "41544:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "41543:25:6"
            },
            "returnParameters": {
              "id": 8399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8398,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8408,
                  "src": "41635:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8397,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "41635:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "41634:9:6"
            },
            "scope": 8535,
            "src": "41518:205:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9563
            ],
            "body": {
              "id": 8428,
              "nodeType": "Block",
              "src": "42074:114:6",
              "statements": [
                {
                  "assignments": [
                    8418
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8418,
                      "mutability": "mutable",
                      "name": "promiseKey",
                      "nodeType": "VariableDeclaration",
                      "scope": 8428,
                      "src": "42085:18:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 8417,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "42085:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8422,
                  "initialValue": {
                    "baseExpression": {
                      "id": 8419,
                      "name": "ordersPromise",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6459,
                      "src": "42106:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                        "typeString": "mapping(uint256 => bytes32)"
                      }
                    },
                    "id": 8421,
                    "indexExpression": {
                      "id": 8420,
                      "name": "_tokenIdSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8411,
                      "src": "42120:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "42106:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "42085:50:6"
                },
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 8423,
                        "name": "promises",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6444,
                        "src": "42153:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                          "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                        }
                      },
                      "id": 8425,
                      "indexExpression": {
                        "id": 8424,
                        "name": "promiseKey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8418,
                        "src": "42162:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "42153:20:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_storage",
                        "typeString": "struct VoucherKernel.Promise storage ref"
                      }
                    },
                    "id": 8426,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "seller",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6416,
                    "src": "42153:27:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8416,
                  "id": 8427,
                  "nodeType": "Return",
                  "src": "42146:34:6"
                }
              ]
            },
            "documentation": {
              "id": 8409,
              "nodeType": "StructuredDocumentation",
              "src": "41731:208:6",
              "text": " @notice Get the holder of a supply\n @param _tokenIdSupply        ID of a promise which is mapped to the corresponding Promise\n @return                  Address of the holder"
            },
            "functionSelector": "1f38585f",
            "id": 8429,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSupplyHolder",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8413,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "42033:8:6"
            },
            "parameters": {
              "id": 8412,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8411,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "41970:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8410,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "41970:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "41969:24:6"
            },
            "returnParameters": {
              "id": 8416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8415,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "42060:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8414,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "42060:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "42059:9:6"
            },
            "scope": 8535,
            "src": "41945:243:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9471
            ],
            "body": {
              "id": 8443,
              "nodeType": "Block",
              "src": "42549:74:6",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 8438,
                        "name": "paymentDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6452,
                        "src": "42567:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherPaymentMethod_$6436_storage_$",
                          "typeString": "mapping(uint256 => struct VoucherKernel.VoucherPaymentMethod storage ref)"
                        }
                      },
                      "id": 8440,
                      "indexExpression": {
                        "id": 8439,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8432,
                        "src": "42582:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "42567:30:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VoucherPaymentMethod_$6436_storage",
                        "typeString": "struct VoucherKernel.VoucherPaymentMethod storage ref"
                      }
                    },
                    "id": 8441,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "addressTokenPrice",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6433,
                    "src": "42567:48:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8437,
                  "id": 8442,
                  "nodeType": "Return",
                  "src": "42560:55:6"
                }
              ]
            },
            "documentation": {
              "id": 8430,
              "nodeType": "StructuredDocumentation",
              "src": "42196:213:6",
              "text": " @notice Get the address of the token where the price for the supply is held\n @param _tokenIdSupply   ID of the voucher supply token\n @return                  Address of the token"
            },
            "functionSelector": "e875a613",
            "id": 8444,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVoucherPriceToken",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8434,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "42508:8:6"
            },
            "parameters": {
              "id": 8433,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8432,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8444,
                  "src": "42445:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8431,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "42445:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "42444:24:6"
            },
            "returnParameters": {
              "id": 8437,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8436,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8444,
                  "src": "42535:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8435,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "42535:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "42534:9:6"
            },
            "scope": 8535,
            "src": "42415:208:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9479
            ],
            "body": {
              "id": 8458,
              "nodeType": "Block",
              "src": "42990:77:6",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 8453,
                        "name": "paymentDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6452,
                        "src": "43008:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherPaymentMethod_$6436_storage_$",
                          "typeString": "mapping(uint256 => struct VoucherKernel.VoucherPaymentMethod storage ref)"
                        }
                      },
                      "id": 8455,
                      "indexExpression": {
                        "id": 8454,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8447,
                        "src": "43023:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "43008:30:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VoucherPaymentMethod_$6436_storage",
                        "typeString": "struct VoucherKernel.VoucherPaymentMethod storage ref"
                      }
                    },
                    "id": 8456,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "addressTokenDeposits",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6435,
                    "src": "43008:51:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8452,
                  "id": 8457,
                  "nodeType": "Return",
                  "src": "43001:58:6"
                }
              ]
            },
            "documentation": {
              "id": 8445,
              "nodeType": "StructuredDocumentation",
              "src": "42631:217:6",
              "text": " @notice Get the address of the token where the deposits for the supply are held\n @param _tokenIdSupply   ID of the voucher supply token\n @return                  Address of the token"
            },
            "functionSelector": "9a751bbd",
            "id": 8459,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVoucherDepositToken",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8449,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "42949:8:6"
            },
            "parameters": {
              "id": 8448,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8447,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8459,
                  "src": "42886:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8446,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "42886:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "42885:24:6"
            },
            "returnParameters": {
              "id": 8452,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8451,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8459,
                  "src": "42976:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8450,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "42976:7:6",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "42975:9:6"
            },
            "scope": 8535,
            "src": "42854:213:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9543
            ],
            "body": {
              "id": 8473,
              "nodeType": "Block",
              "src": "43410:70:6",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 8468,
                        "name": "paymentDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6452,
                        "src": "43428:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherPaymentMethod_$6436_storage_$",
                          "typeString": "mapping(uint256 => struct VoucherKernel.VoucherPaymentMethod storage ref)"
                        }
                      },
                      "id": 8470,
                      "indexExpression": {
                        "id": 8469,
                        "name": "_tokenIdSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8462,
                        "src": "43443:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "43428:30:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VoucherPaymentMethod_$6436_storage",
                        "typeString": "struct VoucherKernel.VoucherPaymentMethod storage ref"
                      }
                    },
                    "id": 8471,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "paymentMethod",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 6431,
                    "src": "43428:44:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 8467,
                  "id": 8472,
                  "nodeType": "Return",
                  "src": "43421:51:6"
                }
              ]
            },
            "documentation": {
              "id": 8460,
              "nodeType": "StructuredDocumentation",
              "src": "43075:194:6",
              "text": " @notice Get the payment method for a particular _tokenIdSupply\n @param _tokenIdSupply   ID of the voucher supply token\n @return                  payment method"
            },
            "functionSelector": "1cf7955d",
            "id": 8474,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVoucherPaymentMethod",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8464,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "43371:8:6"
            },
            "parameters": {
              "id": 8463,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8462,
                  "mutability": "mutable",
                  "name": "_tokenIdSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 8474,
                  "src": "43308:22:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8461,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "43308:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "43307:24:6"
            },
            "returnParameters": {
              "id": 8467,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8466,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8474,
                  "src": "43398:5:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 8465,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "43398:5:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "43397:7:6"
            },
            "scope": 8535,
            "src": "43275:205:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9579
            ],
            "body": {
              "id": 8511,
              "nodeType": "Block",
              "src": "43800:493:6",
              "statements": [
                {
                  "assignments": [
                    8484
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8484,
                      "mutability": "mutable",
                      "name": "tPromise",
                      "nodeType": "VariableDeclaration",
                      "scope": 8511,
                      "src": "43844:23:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                        "typeString": "struct VoucherKernel.Promise"
                      },
                      "typeName": {
                        "id": 8483,
                        "name": "Promise",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6429,
                        "src": "43844:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Promise_$6429_storage_ptr",
                          "typeString": "struct VoucherKernel.Promise"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8490,
                  "initialValue": {
                    "baseExpression": {
                      "id": 8485,
                      "name": "promises",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6444,
                      "src": "43883:8:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Promise_$6429_storage_$",
                        "typeString": "mapping(bytes32 => struct VoucherKernel.Promise storage ref)"
                      }
                    },
                    "id": 8489,
                    "indexExpression": {
                      "arguments": [
                        {
                          "id": 8487,
                          "name": "_tokenIdVoucher",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8477,
                          "src": "43918:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 8486,
                        "name": "getPromiseIdFromVoucherId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8260,
                        "src": "43892:25:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                          "typeString": "function (uint256) view returns (bytes32)"
                        }
                      },
                      "id": 8488,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "43892:42:6",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "43883:52:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Promise_$6429_storage",
                      "typeString": "struct VoucherKernel.Promise storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "43844:91:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8496,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 8492,
                            "name": "tPromise",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8484,
                            "src": "43954:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                              "typeString": "struct VoucherKernel.Promise memory"
                            }
                          },
                          "id": 8493,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "validFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6418,
                          "src": "43954:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 8494,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "43976:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8495,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "43976:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "43954:37:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f56414c49444954595f46524f4d",
                        "id": 8497,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "43993:23:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3dfff879e12777f3cf58c41b18ee8a2fc08a4e09036528922690b3441120a816",
                          "typeString": "literal_string \"INVALID_VALIDITY_FROM\""
                        },
                        "value": "INVALID_VALIDITY_FROM"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3dfff879e12777f3cf58c41b18ee8a2fc08a4e09036528922690b3441120a816",
                          "typeString": "literal_string \"INVALID_VALIDITY_FROM\""
                        }
                      ],
                      "id": 8491,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "43946:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "43946:71:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8499,
                  "nodeType": "ExpressionStatement",
                  "src": "43946:71:6"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8505,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 8501,
                            "name": "tPromise",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8484,
                            "src": "44119:8:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Promise_$6429_memory_ptr",
                              "typeString": "struct VoucherKernel.Promise memory"
                            }
                          },
                          "id": 8502,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "validTo",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6420,
                          "src": "44119:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "expression": {
                            "id": 8503,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "44139:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "44139:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "44119:35:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "494e56414c49445f56414c49444954595f544f",
                        "id": 8506,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "44156:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_220023f3504a4654cffd768699d4a42a97da0536598d777263f15799e2323f90",
                          "typeString": "literal_string \"INVALID_VALIDITY_TO\""
                        },
                        "value": "INVALID_VALIDITY_TO"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_220023f3504a4654cffd768699d4a42a97da0536598d777263f15799e2323f90",
                          "typeString": "literal_string \"INVALID_VALIDITY_TO\""
                        }
                      ],
                      "id": 8500,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "44111:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "44111:67:6",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8508,
                  "nodeType": "ExpressionStatement",
                  "src": "44111:67:6"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 8509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "44281:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 8482,
                  "id": 8510,
                  "nodeType": "Return",
                  "src": "44274:11:6"
                }
              ]
            },
            "documentation": {
              "id": 8475,
              "nodeType": "StructuredDocumentation",
              "src": "43488:176:6",
              "text": " @notice Checks whether a voucher is in valid period for redemption (between start date and end date)\n @param _tokenIdVoucher ID of the voucher token"
            },
            "functionSelector": "9a0271e1",
            "id": 8512,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isInValidityPeriod",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8479,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "43762:8:6"
            },
            "parameters": {
              "id": 8478,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8477,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 8512,
                  "src": "43698:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8476,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "43698:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "43697:25:6"
            },
            "returnParameters": {
              "id": 8482,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8481,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8512,
                  "src": "43789:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8480,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "43789:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "43788:6:6"
            },
            "scope": 8535,
            "src": "43670:623:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9587
            ],
            "body": {
              "id": 8533,
              "nodeType": "Block",
              "src": "44622:170:6",
              "statements": [
                {
                  "expression": {
                    "id": 8531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "44640:144:6",
                    "subExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 8529,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 8521,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "44656:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 8523,
                              "indexExpression": {
                                "id": 8522,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8515,
                                "src": "44671:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "44656:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 8524,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isPaymentReleased",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6261,
                            "src": "44656:49:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 8525,
                                "name": "vouchersStatus",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6463,
                                "src": "44723:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_VoucherStatus_$6268_storage_$",
                                  "typeString": "mapping(uint256 => struct UsingHelpers.VoucherStatus storage ref)"
                                }
                              },
                              "id": 8527,
                              "indexExpression": {
                                "id": 8526,
                                "name": "_tokenIdVoucher",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8515,
                                "src": "44738:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "44723:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VoucherStatus_$6268_storage",
                                "typeString": "struct UsingHelpers.VoucherStatus storage ref"
                              }
                            },
                            "id": 8528,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isDepositsReleased",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6263,
                            "src": "44723:50:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "44656:117:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 8530,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "44641:143:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8520,
                  "id": 8532,
                  "nodeType": "Return",
                  "src": "44633:151:6"
                }
              ]
            },
            "documentation": {
              "id": 8513,
              "nodeType": "StructuredDocumentation",
              "src": "44301:223:6",
              "text": " @notice Checks whether a voucher is in valid state to be transferred. If either payments or deposits are released, voucher could not be transferred\n @param _tokenIdVoucher ID of the voucher token"
            },
            "functionSelector": "5b479d1a",
            "id": 8534,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isVoucherTransferable",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 8517,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "44593:8:6"
            },
            "parameters": {
              "id": 8516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8515,
                  "mutability": "mutable",
                  "name": "_tokenIdVoucher",
                  "nodeType": "VariableDeclaration",
                  "scope": 8534,
                  "src": "44561:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8514,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "44561:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "44560:25:6"
            },
            "returnParameters": {
              "id": 8520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8519,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8534,
                  "src": "44616:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8518,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "44616:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "44615:6:6"
            },
            "scope": 8535,
            "src": "44530:262:6",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 8536,
        "src": "1169:43626:6"
      }
    ],
    "src": "49:44748:6"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.1+commit.f4a555be.Emscripten.clang"
  },
  "networks": {
    "4": {
      "events": {
        "0xac81fe7dd460bb5162a4a7d8fb92a13bd2baf450914fc6b1c4cc3180eba55af0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "_newBosonRouter",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogBosonRouterSet",
          "type": "event"
        },
        "0xff783d200775c8efda1ff912a95c6b9561e641cc8695e015340f06a5b3024f12": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_newCancelFaultPeriod",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogCancelFaultPeriodChanged",
          "type": "event"
        },
        "0xcd124a0a6c3182c7bb77b8052823a4bf7d0a4c90016ffc4d53b969f98d3f8b88": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "_newCashier",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogCashierSet",
          "type": "event"
        },
        "0x08bf60d0e489e33912f3ba0f81f21c6f2ad2499a36dfebfb6cfbfefcc49f3cca": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_newComplainPeriod",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogComplainPeriodChanged",
          "type": "event"
        },
        "0x0fbb6c447a631ca170fad3c540d76f932db4c444d82bc160f7e3eebc6a5f6740": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogExpirationTriggered",
          "type": "event"
        },
        "0x28c953c622aa90e006382693080fb83e2add147a386446e0f24572c6b071adfa": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogFinalizeVoucher",
          "type": "event"
        },
        "0xf570ce8ad3bc67469a0b8e53a32bba1edd0105fc668c1278225660d2291cc554": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint8",
              "name": "_type",
              "type": "uint8"
            }
          ],
          "name": "LogFundsReleased",
          "type": "event"
        },
        "0xc05e9e3de4c67624681fddccb848a2f81797e05e1c09faf702ed3c526a6660e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "_promiseId",
              "type": "bytes32"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "_nonce",
              "type": "uint256"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_seller",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_validFrom",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_validTo",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_idx",
              "type": "uint256"
            }
          ],
          "name": "LogPromiseCreated",
          "type": "event"
        },
        "0x0411cc6d1d8430de89b9f9fdd063617e55946cddb8538d3407f516882db59455": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            }
          ],
          "name": "LogVoucherComplain",
          "type": "event"
        },
        "0xce3b32c0b6a7ffab6dec7497bc73336faeb8e1b3b0b8dc7099699a3595f000a6": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "_tokenIdSupply",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_issuer",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_holder",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "_promiseId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_correlationId",
              "type": "uint256"
            }
          ],
          "name": "LogVoucherDelivered",
          "type": "event"
        },
        "0x125d1de9ad96c695c95a8de033058d2c00835a1e0cbf24b7fa3de72f603c8709": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            }
          ],
          "name": "LogVoucherFaultCancel",
          "type": "event"
        },
        "0x43a88bfc6f85aab9491c25f0ce50c4046d7cb7d4dc209b40914a2574d9855a5c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_holder",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "_promiseId",
              "type": "bytes32"
            }
          ],
          "name": "LogVoucherRedeemed",
          "type": "event"
        },
        "0x66d163993c35c8d3a90f3fbce008096384de89ec441c60c9b9f79aaad36616ff": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            }
          ],
          "name": "LogVoucherRefunded",
          "type": "event"
        },
        "0xd771b32487969df897bdfc40b573cff1c37f81bc0e62b60cacc027d0efd6d33f": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdSupply",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_issuer",
              "type": "address"
            }
          ],
          "name": "LogVoucherSetFaultCancel",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        },
        "0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "Paused",
          "type": "event"
        },
        "0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "Unpaused",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xEfA361fD7cE0B1b409d23F119Fe6BA9e8c9328AF",
      "transactionHash": "0xe7fafb554824f567e0dbd42beeb9dc1c30f488d5fd5c1cf4ad93a77f4330a83b"
    },
    "5777": {
      "events": {
        "0xac81fe7dd460bb5162a4a7d8fb92a13bd2baf450914fc6b1c4cc3180eba55af0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "_newBosonRouter",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogBosonRouterSet",
          "type": "event"
        },
        "0xff783d200775c8efda1ff912a95c6b9561e641cc8695e015340f06a5b3024f12": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_newCancelFaultPeriod",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogCancelFaultPeriodChanged",
          "type": "event"
        },
        "0xcd124a0a6c3182c7bb77b8052823a4bf7d0a4c90016ffc4d53b969f98d3f8b88": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "_newCashier",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogCashierSet",
          "type": "event"
        },
        "0x08bf60d0e489e33912f3ba0f81f21c6f2ad2499a36dfebfb6cfbfefcc49f3cca": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_newComplainPeriod",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogComplainPeriodChanged",
          "type": "event"
        },
        "0x0fbb6c447a631ca170fad3c540d76f932db4c444d82bc160f7e3eebc6a5f6740": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogExpirationTriggered",
          "type": "event"
        },
        "0x28c953c622aa90e006382693080fb83e2add147a386446e0f24572c6b071adfa": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_triggeredBy",
              "type": "address"
            }
          ],
          "name": "LogFinalizeVoucher",
          "type": "event"
        },
        "0xf570ce8ad3bc67469a0b8e53a32bba1edd0105fc668c1278225660d2291cc554": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint8",
              "name": "_type",
              "type": "uint8"
            }
          ],
          "name": "LogFundsReleased",
          "type": "event"
        },
        "0xc05e9e3de4c67624681fddccb848a2f81797e05e1c09faf702ed3c526a6660e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "_promiseId",
              "type": "bytes32"
            },
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "_nonce",
              "type": "uint256"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "_seller",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_validFrom",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_validTo",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_idx",
              "type": "uint256"
            }
          ],
          "name": "LogPromiseCreated",
          "type": "event"
        },
        "0x0411cc6d1d8430de89b9f9fdd063617e55946cddb8538d3407f516882db59455": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            }
          ],
          "name": "LogVoucherComplain",
          "type": "event"
        },
        "0xce3b32c0b6a7ffab6dec7497bc73336faeb8e1b3b0b8dc7099699a3595f000a6": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "uint256",
              "name": "_tokenIdSupply",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_issuer",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_holder",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "_promiseId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_correlationId",
              "type": "uint256"
            }
          ],
          "name": "LogVoucherDelivered",
          "type": "event"
        },
        "0x125d1de9ad96c695c95a8de033058d2c00835a1e0cbf24b7fa3de72f603c8709": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            }
          ],
          "name": "LogVoucherFaultCancel",
          "type": "event"
        },
        "0x43a88bfc6f85aab9491c25f0ce50c4046d7cb7d4dc209b40914a2574d9855a5c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_holder",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "_promiseId",
              "type": "bytes32"
            }
          ],
          "name": "LogVoucherRedeemed",
          "type": "event"
        },
        "0x66d163993c35c8d3a90f3fbce008096384de89ec441c60c9b9f79aaad36616ff": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdVoucher",
              "type": "uint256"
            }
          ],
          "name": "LogVoucherRefunded",
          "type": "event"
        },
        "0xd771b32487969df897bdfc40b573cff1c37f81bc0e62b60cacc027d0efd6d33f": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "_tokenIdSupply",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "_issuer",
              "type": "address"
            }
          ],
          "name": "LogVoucherSetFaultCancel",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        },
        "0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "Paused",
          "type": "event"
        },
        "0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "name": "Unpaused",
          "type": "event"
        }
      },
      "links": {},
      "address": "0xa1d917b9a0981e65B97e918b7F4D19E981559eeD",
      "transactionHash": "0xca3be2e74bafe7871076cc0812e2ffadf6ae1204f534369d1c9e7047055c4b02"
    }
  },
  "schemaVersion": "3.2.5",
  "updatedAt": "2021-03-20T16:53:09.192Z",
  "networkType": "ethereum",
  "devdoc": {
    "details": "Notes:  - Since this is a reference app, it is not yet optimized.      In the next phase, the bulk raw data will be packed into a single bytes32 field and/or pushed off-chain.  - The usage of block.timestamp is honored since vouchers are defined currently with day-precision.      See: https://ethereum.stackexchange.com/questions/5924/how-do-ethereum-mining-nodes-maintain-a-time-consistent-with-the-network/5931#5931",
    "kind": "dev",
    "methods": {
      "burnSupplyOnPause(address,uint256,uint256)": {
        "details": "Token ID is derived following the same principles for both ERC-1155 and ERC-721",
        "params": {
          "_issuer": "The address of the token issuer",
          "_qty": "qty that should be burned",
          "_tokenIdSupply": "ID of the token type"
        }
      },
      "cancelOrFault(uint256,address)": {
        "params": {
          "_tokenIdVoucher": "ID of the voucher"
        }
      },
      "cancelOrFaultVoucherSet(uint256,address)": {
        "params": {
          "_issuer": "owner of the voucher",
          "_tokenIdSupply": "ID of the voucher set"
        }
      },
      "complain(uint256,address)": {
        "params": {
          "_msgSender": "account called the fn from the BR contract",
          "_tokenIdVoucher": "ID of the voucher"
        }
      },
      "createPaymentMethod(uint256,uint8,address,address)": {
        "params": {
          "_paymentMethod": "might be ETHETH, ETHTKN, TKNETH or TKNTKN",
          "_tokenDeposits": "token address which will hold the funds for the deposits of the voucher",
          "_tokenIdSupply": "_tokenIdSupply of the voucher set this is related to",
          "_tokenPrice": "token address which will hold the funds for the price of the voucher"
        }
      },
      "createTokenSupplyID(address,uint256,uint256,uint256,uint256,uint256,uint256)": {
        "params": {
          "_depositBu": "Buyer's deposit",
          "_depositSe": "Seller's deposit",
          "_price": "Price (payment amount)",
          "_seller": "seller of the promise",
          "_validFrom": "Start of valid period",
          "_validTo": "End of valid period"
        }
      },
      "fillOrder(uint256,address,address,uint256)": {
        "params": {
          "_correlationId": "ID of the current interaction with the smart contract for a specific user",
          "_holder": "Address of the recipient of the voucher (ERC-721)",
          "_issuer": "Address of the token's issuer",
          "_tokenIdSupply": "ID of the supply token (ERC-1155)"
        }
      },
      "getBuyerOrderCosts(uint256)": {
        "params": {
          "_tokenIdSupply": "ID of the supply token"
        },
        "returns": {
          "_0": "returns a tuple (Payment amount, Buyer's deposit)"
        }
      },
      "getIdSupplyFromVoucher(uint256)": {
        "params": {
          "_tokenIdVoucher": "ID of the voucher token"
        },
        "returns": {
          "_0": "ID of the supply token"
        }
      },
      "getOrderCosts(uint256)": {
        "params": {
          "_tokenIdSupply": "ID of the supply token"
        },
        "returns": {
          "_0": "returns a tuple (Payment amount, Seller's deposit, Buyer's deposit)"
        }
      },
      "getPromiseIdFromVoucherId(uint256)": {
        "params": {
          "_tokenIdVoucher": "ID of the voucher token"
        },
        "returns": {
          "_0": "ID of the promise"
        }
      },
      "getPromiseKey(uint256)": {
        "params": {
          "_idx": "Index in the array of promise keys"
        },
        "returns": {
          "_0": "Promise ID"
        }
      },
      "getRemQtyForSupply(uint256,address)": {
        "params": {
          "_owner": "holder of the Token Supply",
          "_tokenSupplyId": "Token supply ID"
        },
        "returns": {
          "_0": "remaining quantity"
        }
      },
      "getSellerDeposit(uint256)": {
        "params": {
          "_tokenIdSupply": "ID of the supply token"
        },
        "returns": {
          "_0": "returns sellers deposit"
        }
      },
      "getSupplyHolder(uint256)": {
        "params": {
          "_tokenIdSupply": "ID of a promise which is mapped to the corresponding Promise"
        },
        "returns": {
          "_0": "Address of the holder"
        }
      },
      "getVoucherDepositToken(uint256)": {
        "params": {
          "_tokenIdSupply": "ID of the voucher supply token"
        },
        "returns": {
          "_0": "Address of the token"
        }
      },
      "getVoucherHolder(uint256)": {
        "params": {
          "_tokenIdVoucher": "ID of the voucher token"
        },
        "returns": {
          "_0": "Address of the holder"
        }
      },
      "getVoucherPaymentMethod(uint256)": {
        "params": {
          "_tokenIdSupply": "ID of the voucher supply token"
        },
        "returns": {
          "_0": "payment method"
        }
      },
      "getVoucherPriceToken(uint256)": {
        "params": {
          "_tokenIdSupply": "ID of the voucher supply token"
        },
        "returns": {
          "_0": "Address of the token"
        }
      },
      "getVoucherStatus(uint256)": {
        "params": {
          "_tokenIdVoucher": "ID of the voucher token"
        },
        "returns": {
          "_0": "Status of the voucher (via enum)"
        }
      },
      "isInValidityPeriod(uint256)": {
        "params": {
          "_tokenIdVoucher": "ID of the voucher token"
        }
      },
      "isVoucherTransferable(uint256)": {
        "params": {
          "_tokenIdVoucher": "ID of the voucher token"
        }
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "paused()": {
        "details": "Returns true if the contract is paused, and false otherwise."
      },
      "redeem(uint256,address)": {
        "params": {
          "_msgSender": "account called the fn from the BR contract",
          "_tokenIdVoucher": "ID of the voucher"
        }
      },
      "refund(uint256,address)": {
        "params": {
          "_msgSender": "account called the fn from the BR contract",
          "_tokenIdVoucher": "ID of the voucher"
        }
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "setBosonRouterAddress(address)": {
        "params": {
          "_bosonRouterAddress": "The address of the BR contract"
        }
      },
      "setCancelFaultPeriod(uint256)": {
        "params": {
          "_cancelFaultPeriod": "the new value for cancelOrFault period (in number of seconds)"
        }
      },
      "setCashierAddress(address)": {
        "params": {
          "_cashierAddress": "The address of the BR contract"
        }
      },
      "setComplainPeriod(uint256)": {
        "params": {
          "_complainPeriod": "the new value for complain period (in number of seconds)"
        }
      },
      "setDepositsReleased(uint256)": {
        "params": {
          "_tokenIdVoucher": "ID of the voucher token"
        }
      },
      "setPaymentReleased(uint256)": {
        "params": {
          "_tokenIdVoucher": "ID of the voucher token"
        }
      },
      "setSupplyHolderOnTransfer(uint256,address)": {
        "params": {
          "_newSeller": "new holder of the supply",
          "_tokenIdSupply": "_tokenIdSupply which will be transferred"
        }
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "triggerExpiration(uint256)": {
        "params": {
          "_tokenIdVoucher": "ID of the voucher token"
        }
      },
      "triggerFinalizeVoucher(uint256)": {
        "params": {
          "_tokenIdVoucher": "ID of the voucher token"
        }
      }
    },
    "title": "VoucherKernel contract is controlling the core business logic",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "burnSupplyOnPause(address,uint256,uint256)": {
        "notice": "Extract a standard non-fungible tokens ERC-721 from a supply stored in ERC-1155"
      },
      "cancelOrFault(uint256,address)": {
        "notice": "Cancel/Fault transaction by the Seller, admitting to a fault or backing out of the deal"
      },
      "cancelOrFaultVoucherSet(uint256,address)": {
        "notice": "Cancel/Fault transaction by the Seller, cancelling the remaining uncommitted voucher set so that seller prevents buyers from committing to vouchers for items no longer in exchange."
      },
      "complain(uint256,address)": {
        "notice": "Issue a complain for a voucher"
      },
      "createPaymentMethod(uint256,uint8,address,address)": {
        "notice": "Creates a Payment method struct recording the details on how the seller requires to receive Price and Deposits for a certain Voucher Set."
      },
      "createTokenSupplyID(address,uint256,uint256,uint256,uint256,uint256,uint256)": {
        "notice": "Creating a new promise for goods or services. Can be reused, e.g. for making different batches of these (in the future)."
      },
      "fillOrder(uint256,address,address,uint256)": {
        "notice": "Fill Voucher Order, iff funds paid, then extract & mint NFT to the voucher holder"
      },
      "getBuyerOrderCosts(uint256)": {
        "notice": "Get Buyer costs required to make an order for a supply token"
      },
      "getIdSupplyFromVoucher(uint256)": {
        "notice": "Get the supply token ID from a voucher token"
      },
      "getOrderCosts(uint256)": {
        "notice": "Get all necessary funds for a supply token"
      },
      "getPromiseIdFromVoucherId(uint256)": {
        "notice": "Get the promise ID from a voucher token"
      },
      "getPromiseKey(uint256)": {
        "notice": "Get the promise ID at specific index"
      },
      "getRemQtyForSupply(uint256,address)": {
        "notice": "Get the remaining quantity left in supply of tokens (e.g ERC-721 left in ERC-1155) of an account"
      },
      "getSellerDeposit(uint256)": {
        "notice": "Get Seller deposit"
      },
      "getSupplyHolder(uint256)": {
        "notice": "Get the holder of a supply"
      },
      "getVoucherDepositToken(uint256)": {
        "notice": "Get the address of the token where the deposits for the supply are held"
      },
      "getVoucherHolder(uint256)": {
        "notice": "Get the holder of a voucher"
      },
      "getVoucherPaymentMethod(uint256)": {
        "notice": "Get the payment method for a particular _tokenIdSupply"
      },
      "getVoucherPriceToken(uint256)": {
        "notice": "Get the address of the token where the price for the supply is held"
      },
      "getVoucherStatus(uint256)": {
        "notice": "Get the current status of a voucher"
      },
      "isInValidityPeriod(uint256)": {
        "notice": "Checks whether a voucher is in valid period for redemption (between start date and end date)"
      },
      "isVoucherTransferable(uint256)": {
        "notice": "Checks whether a voucher is in valid state to be transferred. If either payments or deposits are released, voucher could not be transferred"
      },
      "pause()": {
        "notice": "Pause the process of interaction with voucherID's (ERC-721), in case of emergency. Only BR contract is in control of this function."
      },
      "redeem(uint256,address)": {
        "notice": "Redemption of the vouchers promise"
      },
      "refund(uint256,address)": {
        "notice": "Refunding a voucher"
      },
      "setBosonRouterAddress(address)": {
        "notice": "Set the address of the Boson Router contract"
      },
      "setCancelFaultPeriod(uint256)": {
        "notice": "Set the general cancelOrFault period, should be used sparingly as it has significant consequences. Here done simply for demo purposes."
      },
      "setCashierAddress(address)": {
        "notice": "Set the address of the Cashier contract"
      },
      "setComplainPeriod(uint256)": {
        "notice": "Set the general complain period, should be used sparingly as it has significant consequences. Here done simply for demo purposes."
      },
      "setDepositsReleased(uint256)": {
        "notice": "Mark voucher token that the deposits were released"
      },
      "setPaymentReleased(uint256)": {
        "notice": "Mark voucher token that the payment was released"
      },
      "setSupplyHolderOnTransfer(uint256,address)": {
        "notice": "Set the address of the new holder of a _tokenIdSupply on transfer"
      },
      "triggerExpiration(uint256)": {
        "notice": "Mark voucher token as expired"
      },
      "triggerFinalizeVoucher(uint256)": {
        "notice": "Mark voucher token to the final status"
      },
      "unpause()": {
        "notice": "Unpause the process of interaction with voucherID's (ERC-721). Only BR contract is in control of this function."
      }
    },
    "version": 1
  }
}