@aragon/apps-payroll
Version:
_**Code in Github:**_ [aragon-apps/apps/payroll](https://github.com/aragon/aragon-apps/tree/master/future-apps/payroll)
1,044 lines • 2.37 MB
JSON
{
"contractName": "Payroll",
"abi": [
{
"constant": true,
"inputs": [],
"name": "hasInitialized",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MANAGE_ALLOWED_TOKENS_ROLE",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "nextEmployee",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_script",
"type": "bytes"
}
],
"name": "getEVMScriptExecutor",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MODIFY_RATE_EXPIRY_ROLE",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "finance",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getRecoveryVault",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "ADD_BONUS_ROLE",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "feed",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "SET_EMPLOYEE_SALARY_ROLE",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MODIFY_PRICE_FEED_ROLE",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "TERMINATE_EMPLOYEE_ROLE",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "token",
"type": "address"
}
],
"name": "allowRecoverability",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "appId",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "ADD_REIMBURSEMENT_ROLE",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getInitializationBlock",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_token",
"type": "address"
}
],
"name": "transferToVault",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_sender",
"type": "address"
},
{
"name": "_role",
"type": "bytes32"
},
{
"name": "_params",
"type": "uint256[]"
}
],
"name": "canPerform",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getEVMScriptRegistry",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "rateExpiryTime",
"outputs": [
{
"name": "",
"type": "uint64"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "ADD_EMPLOYEE_ROLE",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "kernel",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "isPetrified",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "denominationToken",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "employeeId",
"type": "uint256"
},
{
"indexed": true,
"name": "accountAddress",
"type": "address"
},
{
"indexed": false,
"name": "initialDenominationSalary",
"type": "uint256"
},
{
"indexed": false,
"name": "startDate",
"type": "uint64"
},
{
"indexed": false,
"name": "role",
"type": "string"
}
],
"name": "AddEmployee",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "employeeId",
"type": "uint256"
},
{
"indexed": false,
"name": "endDate",
"type": "uint64"
}
],
"name": "TerminateEmployee",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "employeeId",
"type": "uint256"
},
{
"indexed": false,
"name": "denominationSalary",
"type": "uint256"
}
],
"name": "SetEmployeeSalary",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "employeeId",
"type": "uint256"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
}
],
"name": "AddEmployeeAccruedSalary",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "employeeId",
"type": "uint256"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
}
],
"name": "AddEmployeeBonus",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "employeeId",
"type": "uint256"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
}
],
"name": "AddEmployeeReimbursement",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "employeeId",
"type": "uint256"
},
{
"indexed": true,
"name": "newAccountAddress",
"type": "address"
},
{
"indexed": true,
"name": "oldAccountAddress",
"type": "address"
}
],
"name": "ChangeAddressByEmployee",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "employeeId",
"type": "uint256"
}
],
"name": "DetermineAllocation",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "employeeId",
"type": "uint256"
},
{
"indexed": true,
"name": "accountAddress",
"type": "address"
},
{
"indexed": true,
"name": "token",
"type": "address"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"name": "exchangeRate",
"type": "uint256"
},
{
"indexed": false,
"name": "paymentReference",
"type": "string"
}
],
"name": "SendPayment",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "token",
"type": "address"
},
{
"indexed": false,
"name": "allowed",
"type": "bool"
}
],
"name": "SetAllowedToken",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "feed",
"type": "address"
}
],
"name": "SetPriceFeed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"name": "time",
"type": "uint64"
}
],
"name": "SetRateExpiryTime",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "executor",
"type": "address"
},
{
"indexed": false,
"name": "script",
"type": "bytes"
},
{
"indexed": false,
"name": "input",
"type": "bytes"
},
{
"indexed": false,
"name": "returnData",
"type": "bytes"
}
],
"name": "ScriptResult",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "vault",
"type": "address"
},
{
"indexed": true,
"name": "token",
"type": "address"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
}
],
"name": "RecoverToVault",
"type": "event"
},
{
"constant": false,
"inputs": [
{
"name": "_finance",
"type": "address"
},
{
"name": "_denominationToken",
"type": "address"
},
{
"name": "_priceFeed",
"type": "address"
},
{
"name": "_rateExpiryTime",
"type": "uint64"
}
],
"name": "initialize",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_token",
"type": "address"
},
{
"name": "_allowed",
"type": "bool"
}
],
"name": "setAllowedToken",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_feed",
"type": "address"
}
],
"name": "setPriceFeed",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_time",
"type": "uint64"
}
],
"name": "setRateExpiryTime",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_accountAddress",
"type": "address"
},
{
"name": "_initialDenominationSalary",
"type": "uint256"
},
{
"name": "_startDate",
"type": "uint64"
},
{
"name": "_role",
"type": "string"
}
],
"name": "addEmployee",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_employeeId",
"type": "uint256"
},
{
"name": "_amount",
"type": "uint256"
}
],
"name": "addBonus",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_employeeId",
"type": "uint256"
},
{
"name": "_amount",
"type": "uint256"
}
],
"name": "addReimbursement",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_employeeId",
"type": "uint256"
},
{
"name": "_denominationSalary",
"type": "uint256"
}
],
"name": "setEmployeeSalary",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_employeeId",
"type": "uint256"
},
{
"name": "_endDate",
"type": "uint64"
}
],
"name": "terminateEmployee",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_newAccountAddress",
"type": "address"
}
],
"name": "changeAddressByEmployee",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_tokens",
"type": "address[]"
},
{
"name": "_distribution",
"type": "uint256[]"
}
],
"name": "determineAllocation",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_type",
"type": "uint8"
},
{
"name": "_requestedAmount",
"type": "uint256"
},
{
"name": "_minRates",
"type": "uint256[]"
}
],
"name": "payday",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "isForwarder",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_evmScript",
"type": "bytes"
}
],
"name": "forward",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_sender",
"type": "address"
},
{
"name": "",
"type": "bytes"
}
],
"name": "canForward",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_accountAddress",
"type": "address"
}
],
"name": "getEmployeeIdByAddress",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_employeeId",
"type": "uint256"
}
],
"name": "getEmployee",
"outputs": [
{
"name": "accountAddress",
"type": "address"
},
{
"name": "denominationSalary",
"type": "uint256"
},
{
"name": "accruedSalary",
"type": "uint256"
},
{
"name": "bonus",
"type": "uint256"
},
{
"name": "reimbursements",
"type": "uint256"
},
{
"name": "lastPayroll",
"type": "uint64"
},
{
"name": "endDate",
"type": "uint64"
},
{
"name": "allocationTokens",
"type": "address[]"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_employeeId",
"type": "uint256"
}
],
"name": "getTotalOwedSalary",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_employeeId",
"type": "uint256"
},
{
"name": "_token",
"type": "address"
}
],
"name": "getAllocation",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_token",
"type": "address"
}
],
"name": "isTokenAllowed",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x6080604052620000176401000000006200001d810204565b6200023b565b6200003064010000000062000125810204565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a45440000000000000000602082015290156200010c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620000d0578181015183820152602001620000b6565b50505050905090810190601f168015620000fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506200012360001964010000000062000154810204565b565b60006200014f60008051602062005fde833981519152640100000000620037666200023382021704565b905090565b6200016764010000000062000125810204565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a454400000000000000006020820152901562000206576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015620000d0578181015183820152602001620000b6565b506200023060008051602062005fde833981519152826401000000006200376a6200023782021704565b50565b5490565b9055565b615d93806200024b6000396000f3006080604052600436106102195763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630803fac0811461021e5780630a0c75aa146102475780631216906b146102645780631bb440b1146102925780631bfe5f61146102b95780632350a84d146102ce57806327e02676146102f35780632914b9bd146103245780632ee235ef146103a6578063313b7b19146103bb57806332f0a3b5146103d057806335285a0f146103e557806337a7b7d8146103fa5780633fe3f1cf1461040f578063456fbfea146104565780634fd52f421461046b578063595da7291461048d5780637100650e146104a2578063724e78da146104b75780637e7db6e1146104e557806380afdea81461051357806388ea9247146105285780638aaa22841461053d5780638b3dd749146105705780639d4941d814610585578063a1658fad146105b3578063a479e50814610627578063a52e605f1461063c578063b02b69d614610654578063b7cafcc81461066f578063bca9a5c51461068a578063bef80ce11461077b578063bf510ff4146107ad578063c0774df3146107c2578063d4aae0c414610836578063d948d4681461084b578063dcb33f3e146108a4578063de4796ed146108cf578063ea199a83146108e4578063f6b9fdfb14610930578063f9eaee0d14610945578063fd64eccb14610973578063fe2fdf0b14610988578063ffd5acad146109b4575b600080fd5b34801561022a57600080fd5b506102336109e2565b604080519115158252519081900360200190f35b34801561025357600080fd5b50610262600435602435610a0c565b005b34801561027057600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff60043516610c8e565b34801561029e57600080fd5b506102a7610f25565b60408051918252519081900360200190f35b3480156102c557600080fd5b506102a7610f49565b3480156102da57600080fd5b5061026260043567ffffffffffffffff60243516610f4f565b3480156102ff57600080fd5b506102a760043573ffffffffffffffffffffffffffffffffffffffff602435166110e6565b34801561033057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261037d9436949293602493928401919081908401838280828437509497506111cd9650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156103b257600080fd5b506102a76112db565b3480156103c757600080fd5b5061037d6112ff565b3480156103dc57600080fd5b5061037d61131b565b3480156103f157600080fd5b506102a76113ba565b34801561040657600080fd5b5061037d6113de565b34801561041b57600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff6004358116906024358116906044351667ffffffffffffffff606435166113fa565b34801561046257600080fd5b506102a76115c0565b34801561047757600080fd5b5061026267ffffffffffffffff600435166115e4565b34801561049957600080fd5b506102a76116ea565b3480156104ae57600080fd5b506102a761170e565b3480156104c357600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff60043516611732565b3480156104f157600080fd5b5061023373ffffffffffffffffffffffffffffffffffffffff6004351661182a565b34801561051f57600080fd5b506102a7611830565b34801561053457600080fd5b506102a7611860565b34801561054957600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff600435166024351515611884565b34801561057c57600080fd5b506102a7611ab3565b34801561059157600080fd5b5061026273ffffffffffffffffffffffffffffffffffffffff60043516611ade565b3480156105bf57600080fd5b50604080516020600460443581810135838102808601850190965280855261023395833573ffffffffffffffffffffffffffffffffffffffff16956024803596369695606495939492019291829185019084908082843750949750611e009650505050505050565b34801561063357600080fd5b5061037d611f90565b34801561064857600080fd5b506102a7600435612084565b34801561066057600080fd5b5061026260043560243561214e565b34801561067b57600080fd5b506102626004356024356122d4565b34801561069657600080fd5b506106a260043561245a565b604051808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018681526020018581526020018467ffffffffffffffff1667ffffffffffffffff1681526020018367ffffffffffffffff1667ffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610760578181015183820152602001610748565b50505050905001995050505050505050505060405180910390f35b34801561078757600080fd5b50610790612618565b6040805167ffffffffffffffff9092168252519081900360200190f35b3480156107b957600080fd5b506102a7612640565b3480156107ce57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261023395833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506126649650505050505050565b34801561084257600080fd5b5061037d61269a565b34801561085757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102629436949293602493928401919081908401838280828437509497506126c59650505050505050565b3480156108b057600080fd5b506102626004803560ff169060248035916044359182019101356127f9565b3480156108db57600080fd5b50610233612d15565b3480156108f057600080fd5b506102626004803573ffffffffffffffffffffffffffffffffffffffff1690602480359160443567ffffffffffffffff1691606435908101910135612d46565b34801561093c57600080fd5b5061037d612e6a565b34801561095157600080fd5b5061023373ffffffffffffffffffffffffffffffffffffffff60043516612e86565b34801561097f57600080fd5b50610233612f5a565b34801561099457600080fd5b506102626024600480358281019290820135918135918201910135612f5f565b3480156109c057600080fd5b506102a773ffffffffffffffffffffffffffffffffffffffff600435166134da565b6000806109ed611ab3565b90508015801590610a05575080610a026135ca565b10155b91505b5090565b60008281526004602052604081206001015481907fea9ac65018da2421cf419ee2152371440c08267a193a33ccc1e39545d197e44d90610a4f90869086906135ce565b610a5a338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515610b33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610af8578181015183820152602001610ae0565b50505050905090810190601f168015610b255780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5085610b3e81613647565b60408051808201909152601b81527f504159524f4c4c5f4e4f4e5f4143544956455f454d504c4f59454500000000006020820152901515610bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060008781526004602052604081209550610bf7908690613664565b9350610c0387856136f1565b610c0b613754565b60058601805467ffffffffffffffff929092167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009092169190911790556001850186905560408051878152905188917fec4f21c1230ce7d88517d17b1f8ae85725a029dc2066fe2ed6401f1b01024e05919081900360200190a250505050505050565b33600081815260056020908152604080832054835260048252808320548151808301909252601d82527f504159524f4c4c5f53454e4445525f444f45535f4e4f545f4d4154434800000092820192909252919283929173ffffffffffffffffffffffffffffffffffffffff1614610d61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50610d8b7fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb613766565b60408051808201909152601981527f5245454e5452414e43595f5245454e5452414e545f43414c4c0000000000000060208201529015610e27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50610e597fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600163ffffffff61376a16565b50503360009081526005602090815260408083205480845260049092529091205473ffffffffffffffffffffffffffffffffffffffff16610e9a828461376e565b73ffffffffffffffffffffffffffffffffffffffff80821660008181526005602052604080822082905551919286169185917f5a3949ffa1f5851afea532ad9d4c7dfb51bf68f7d5964ff77f3bb4c0abedbbe491a4610f207fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600063ffffffff61376a16565b505050565b7f0be34987c45700ee3fae8c55e270418ba903337decc6bacb1879504be9331c0681565b60035481565b7f69c67f914d12b6440e7ddf01961214818d9158fbcb19211e0ff42800fdea9242610f848367ffffffffffffffff8416613946565b610f8f338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c45440000000000000000000000000000000000602082015290151561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b508361103781613647565b60408051808201909152601b81527f504159524f4c4c5f4e4f4e5f4143544956455f454d504c4f594545000000000060208201529015156110d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506110df85856139a1565b5050505050565b6000826110f281613ae4565b60408051808201909152601d81527f504159524f4c4c5f454d504c4f5945455f444f45534e545f4558495354000000602082015290151561118f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50600084815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845260070190915290205491505b5092915050565b60006111d7611f90565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561125b578181015183820152602001611243565b50505050905090810190601f1680156112885780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1580156112a757600080fd5b505af11580156112bb573d6000803e3d6000fd5b505050506040513d60208110156112d157600080fd5b505190505b919050565b7f79fe989a8899060dfbdabb174ebb96616fa9f1d9dadd739f8d814cbab452404e81565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600061132561269a565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561138857600080fd5b505af115801561139c573d6000803e3d6000fd5b505050506040513d60208110156113b257600080fd5b505190505b90565b7fceca7e2f5eb749a87aaf68f3f76d6b9251aa2f4600f13f93c5a4adf7a72df4ae81565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b611402611ab3565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a454400000000000000006020820152901561149e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506114a7613b0e565b6114b084613bed565b60408051808201909152601c81527f504159524f4c4c5f46494e414e43455f4e4f545f434f4e545241435400000000602082015290151561154d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506000805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560018054928616929091169190911790556115ac82613c20565b6115b581613d3c565b505060016003555050565b7fea9ac65018da2421cf419ee2152371440c08267a193a33ccc1e39545d197e44d81565b6002547f79fe989a8899060dfbdabb174ebb96616fa9f1d9dadd739f8d814cbab452404e906116389067ffffffffffffffff8085169174010000000000000000000000000000000000000000900416613946565b611643338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156116e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50610f2083613d3c565b7f74350efbcba8b85341c5bbf70cc34e2a585fc1463524773a12fa0a71d4eb930281565b7f69c67f914d12b6440e7ddf01961214818d9158fbcb19211e0ff42800fdea924281565b6002547f74350efbcba8b85341c5bbf70cc34e2a585fc1463524773a12fa0a71d4eb93029061177890839073ffffffffffffffffffffffffffffffffffffffff16613e75565b611783338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50610f2083613c20565b50600190565b600061185b7fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b613766565b905090565b7f90698b9d54427f1e41636025017309bdb1b55320da960c8845bab0a504b01a1681565b7f0be34987c45700ee3fae8c55e270418ba903337decc6bacb1879504be9331c066118ae83613ead565b6118b9338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5073ffffffffffffffffffffffffffffffffffffffff8416600090815260066020908152604091829020548251808401909352601983527f504159524f4c4c5f544f4b454e5f414c52454144595f534554000000000000009183019190915260ff1615158415151415611a25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5073ffffffffffffffffffffffffffffffffffffffff841660008181526006602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016871515908117909155825190815291517fe589eb036e62c07e307aa4d441bd39c81e8bd86f349eaacb0caa06b1477f7f9a9281900390910190a250505050565b600061185b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e613766565b6000806000611aec8461182a565b60408051808201909152601281527f5245434f5645525f444953414c4c4f57454400000000000000000000000000006020820152901515611b89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50611b9261131b565b9250611b9d83613bed565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515611c3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5073ffffffffffffffffffffffffffffffffffffffff84161515611ca5576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050158015611c9f573d6000803e3d6000fd5b50611d95565b5082611ccd73ffffffffffffffffffffffffffffffffffffffff82163063ffffffff613ed216565b9150611cf673ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff61400b16565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c45440000006020820152901515611d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b600080611e0b6109e2565b1515611e1a5760009150611f88565b611e2261269a565b905073ffffffffffffffffffffffffffffffffffffffff81161515611e4a5760009150611f88565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef9106863087611e72886140a3565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b83811015611f0a578181015183820152602001611ef2565b50505050905090810190601f168015611f375780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015611f5957600080fd5b505af1158015611f6d573d6000803e3d6000fd5b505050506040513d6020811015611f8357600080fd5b505191505b509392505050565b600080611f9b61269a565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b15801561205257600080fd5b505af1158015612066573d6000803e3d6000fd5b505050506040513d602081101561207c57600080fd5b505192915050565b60008161209081613ae4565b60408051808201909152601d81527f504159524f4c4c5f454d504c4f5945455f444f45534e545f4558495354000000602082015290151561212d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506000838152600460205260409020612145906140ad565b91505b50919050565b7fceca7e2f5eb749a87aaf68f3f76d6b9251aa2f4600f13f93c5a4adf7a72df4ae6121798383613946565b612184338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b508361222c81613647565b60408051808201909152601b81527f504159524f4c4c5f4e4f4e5f4143544956455f454d504c4f594545000000000060208201529015156122c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506110df85856140fe565b7f90698b9d54427f1e41636025017309bdb1b55320da960c8845bab0a504b01a166122ff8383613946565b61230a338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50836123b281613647565b60408051808201909152601b81527f504159524f4c4c5f4e4f4e5f4143544956455f454d504c4f5945450000000000602082015290151561244f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506110df8585614161565b6000806000806000806000606060008961247381613ae4565b60408051808201909152601d81527f504159524f4c4c5f454d504c4f5945455f444f45534e545f45584953540000006020820152901515612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50600460008c815260200190815260200160002091508160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169950816001015498508160020154975081600301549650816004015495508160050160009054906101000a900467ffffffffffffffff1694508160050160089054906101000a900467ffffffffffffffff1693508160060180548060200260200160405190810160405280929190818152602001828054801561260457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116125d9575b505050505092505050919395975091939597565b60025474010000000000000000000000000000000000000000900467ffffffffffffffff1681565b7f9ecdc3c63716b45d0756eece5fe1614cae1889ec5a1ce62b3127c1f1f1615d6e81565b73ffffffffffffffffffffffffffffffffffffffff821660009081526005602052604081205461269390613647565b9392505050565b600061185b7f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b613766565b6060806126d23384612664565b60408051808201909152601781527f504159524f4c4c5f43414e5f4e4f545f464f5257415244000000000000000000602082015290151561276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50604080516000815260016020808301828152606084018552929550919290919085019080388339505060008054835193945073ffffffffffffffffffffffffffffffffffffffff169284925081106127c457fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302909101909101526127f38383836141c6565b50505050565b33600081815260056020908152604080832054835260048252808320548151808301909252601d82527f504159524f4c4c5f53454e4445525f444f45535f4e4f545f4d4154434800000092820192909252919283928392839283928392909173ffffffffffffffffffffffffffffffffffffffff909116146128d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506129017fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb613766565b60408051808201909152601981527f5245454e5452414e43595f5245454e5452414e545f43414c4c000000000000006020820152901561299d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506129cf7fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600163ffffffff61376a16565b33600090815260056020908152604080832054808452600490925290912090955093506129fb8461489c565b861580612a0b5750600684015487145b60408051808201909152601a81527f504159524f4c4c5f4d494e5f52415445535f4d49534d415443480000000000006020820152901515612aa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060008a6002811115612ab757fe5b1415612ae357612ac6846140ad565b9250612ad2838a614af1565b9550612ade8487614c3f565b612bf8565b60018a6002811115612af157fe5b1415612b245783600401549150612b08828a614af1565b9550612b1a828763ffffffff614dd616565b6004850155612bf8565b60028a6002811115612b3257fe5b1415612b6457506003830154612b48818a614af1565b9550612b5a818763ffffffff614dd616565b6003850155612bf8565b604080518082018252601c81527f504159524f4c4c5f494e56414c49445f5041594d454e545f5459504500000000602080830191825292517f08c379a000000000000000000000000000000000000000000000000000000000815260048101938452825160248201528251929392839260449092019190808383600083811015610af8578181015183820152602001610ae0565b612c31858b888b8b8080602002602001604051908101604052809392919081815260200183836020028082843750614e81945050505050565b60408051808201909152601481527f504159524f4c4c5f4e4f5448494e475f504149440000000000000000000000006020820152901515612cce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50612cd885615374565b612d097fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600063ffffffff61376a16565b50505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612d40611ab3565b14905090565b7f9ecdc3c63716b45d0756eece5fe1614cae1889ec5a1ce62b3127c1f1f1615d6e612d7c868667ffffffffffffffff8716615483565b612d87338383611e00565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612e24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b50612e6187878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437506154ae945050505050565b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6000612e906109e2565b60408051808201909152601481527f494e49545f4e4f545f494e495449414c495a45440000000000000000000000006020820152901515612f2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505073ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205460ff1690565b600190565b33600081815260056020908152604080832054835260048252808320548151808301909252601d82527f504159524f4c4c5f53454e4445525f444f45535f4e4f545f4d415443480000009282019290925291928392606092849283929173ffffffffffffffffffffffffffffffffffffffff1614613039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506130637fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb613766565b60408051808201909152601981527f5245454e5452414e43595f5245454e5452414e545f43414c4c00000000000000602082015290156130ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b506131317fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600163ffffffff61376a16565b60408051808201909152601a81527f504159524f4c4c5f4d41585f414c4c4f5745445f544f4b454e53000000000000602082015260148911156131d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b5060408051606081018252602181527f504159524f4c4c5f544f4b454e5f414c4c4f434154494f4e5f4d49534d41544360208201527f480000000000000000000000000000000000000000000000000000000000000091810191909152888714613296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b503360009081526005602090815260408083205480845260048352928190206006810180548351818602810186019094528084529499509097509092909183018282801561331a57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116132ef575b50505050509250600091505b825182101561338057836007016000848481518110151561334357fe5b602090810290910181015173ffffffffffffffffffffffffffffffffffffffff168252810191909152604001600090812055600190910190613326565b61338e600685016000615d2c565b5060005b8781101561346a57600684018989838181106133aa57fe5b835460018101855560009485526020948590200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff959092029390930135939093169290921790555086868281811061341757fe5b905060200201358460070160008b8b85818110151561343257fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff1683525081019190915260400160002055600101613392565b6134738461489c565b60405185907f2e68f13a32c51068abe241b8c7db891d265385114938311f83a31583b2a11d7a90600090a26134cf7fe855346402235fdd185c890e68d2c4ecad599b88587635ee285bce2fda58dacb600063ffffffff61376a16565b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560209081526040808320548151808301909252601d82527f504159524f4c4c5f454d504c4f5945455f444f45534e545f4558495354000000928201929092529015156135a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610af8578181015183820152602001610ae0565b505073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b4390565b604080516003808252608082019092526060916020820183803883390190505090508381600081518110151561360057fe5b60209081029091010152805183908290600190811061361b57fe5b60209081029091010152805182908290600290811061363657fe5b602090810290910101529392505050565b600081815260046020526040812061365e9061561d565b92915050565b60008060008061367386615651565b925082151561368557600093506136e8565b8560010154915084156136d857508082028183828115156136a257fe5b0414156136af57806136d1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b93506136e8565b6136d1828463ffffffff6156ca16565b50505092915050565b60008281526004602052604090206002810154613714908363ffffffff61578c16565b600282015560408051838152905184917f494c76e58dab1186acc63fd537885795bd237ae0feb2d