60806040525f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff021916908315150217905550662386f26fc10000600d55610d05600e556002600f5560026010557f331513b8c41ec327332dee1a1cafe7dbac10d27628fa5a125a211f21752dc5bd5f1b60115573c614485fa78c71be9bbb70f2c702a06549223d3860155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c614485fa78c71be9bbb70f2c702a06549223d3860165f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c614485fa78c71be9bbb70f2c702a06549223d3860175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801562000181575f80fd5b506040518060400160405280600581526020017f43726973730000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f43524953530000000000000000000000000000000000000000000000000000008152506200020e620002026200025c60201b60201c565b6200026360201b60201c565b81600190816200021f919062000588565b50806002908162000231919062000588565b5050506001600b819055506001600c5f6101000a81548160ff0219169083151502179055506200066c565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620003a057607f821691505b602082108103620003b657620003b56200035b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200041a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003dd565b620004268683620003dd565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004706200046a62000464846200043e565b62000447565b6200043e565b9050919050565b5f819050919050565b6200048b8362000450565b620004a36200049a8262000477565b848454620003e9565b825550505050565b5f90565b620004b9620004ab565b620004c681848462000480565b505050565b5b81811015620004ed57620004e15f82620004af565b600181019050620004cc565b5050565b601f8211156200053c576200050681620003bc565b6200051184620003ce565b8101602085101562000521578190505b620005396200053085620003ce565b830182620004cb565b50505b505050565b5f82821c905092915050565b5f6200055e5f198460080262000541565b1980831691505092915050565b5f6200057883836200054d565b9150826002028217905092915050565b620005938262000324565b67ffffffffffffffff811115620005af57620005ae6200032e565b5b620005bb825462000388565b620005c8828285620004f1565b5f60209050601f831160018114620005fe575f8415620005e9578287015190505b620005f585826200056b565b86555062000664565b601f1984166200060e86620003bc565b5f5b82811015620006375784890151825560018201915060208501945060208101905062000610565b8683101562000657578489015162000653601f8916826200054d565b8355505b6001600288020188555050505b505050505050565b6150a7806200067a5f395ff3fe60806040526004361061025b575f3560e01c80634f5d87b8116101435780639e6a1d7d116100b5578063b9eefad311610079578063b9eefad3146108b3578063c87b56dd146108ef578063dbf724c71461092b578063e985e9c514610953578063ebf0c7171461098f578063f2fde38b146109b95761025b565b80639e6a1d7d146107d5578063a035b1fe146107fd578063a22cb46514610827578063b45a3c0e1461084f578063b88d4fde1461088b5761025b565b8063715018a611610107578063715018a6146106f35780637ef8f4e9146107095780638599b9d5146107315780638da5cb5b1461075957806391b7f5ed1461078357806395d89b41146107ab5761025b565b80634f5d87b8146105db5780634f6ccce7146106175780636352211e1461065357806367370c791461068f57806370a08231146106b75761025b565b806322217224116101dc578063372f657c116101a0578063372f657c14610509578063378a9ab5146105255780633ccfd60b1461054d57806342842e0e146105635780634adf265c1461058b5780634e963f0a146105b35761025b565b8063222172241461040357806323b872dd1461043f578063294cdf0d146104675780632f745c59146104a357806332cb6b0c146104df5761025b565b8063095ea7b311610223578063095ea7b3146103535780630d8eff171461037b57806312065fe0146103a55780631249c58b146103cf57806318160ddd146103d95761025b565b806301ffc9a71461025f578063027752401461029b57806303c13148146102c557806306fdde03146102ed578063081812fc14610317575b5f80fd5b34801561026a575f80fd5b5061028560048036038101906102809190613451565b6109e1565b6040516102929190613496565b60405180910390f35b3480156102a6575f80fd5b506102af610a5a565b6040516102bc91906134c7565b60405180910390f35b3480156102d0575f80fd5b506102eb60048036038101906102e6919061353a565b610a60565b005b3480156102f8575f80fd5b50610301610aab565b60405161030e91906135ef565b60405180910390f35b348015610322575f80fd5b5061033d60048036038101906103389190613639565b610b3b565b60405161034a9190613673565b60405180910390f35b34801561035e575f80fd5b506103796004803603810190610374919061368c565b610b7d565b005b348015610386575f80fd5b5061038f610c93565b60405161039c91906134c7565b60405180910390f35b3480156103b0575f80fd5b506103b9610c99565b6040516103c691906134c7565b60405180910390f35b6103d7610ca8565b005b3480156103e4575f80fd5b506103ed610fe8565b6040516103fa91906134c7565b60405180910390f35b34801561040e575f80fd5b50610429600480360381019061042491906137f6565b610ff4565b6040516104369190613855565b60405180910390f35b34801561044a575f80fd5b506104656004803603810190610460919061386e565b61100d565b005b348015610472575f80fd5b5061048d6004803603810190610488919061353a565b61106d565b60405161049a9190613975565b60405180910390f35b3480156104ae575f80fd5b506104c960048036038101906104c4919061368c565b6111c1565b6040516104d691906134c7565b60405180910390f35b3480156104ea575f80fd5b506104f3611261565b60405161050091906134c7565b60405180910390f35b610523600480360381019061051e91906139f2565b611267565b005b348015610530575f80fd5b5061054b6004803603810190610546919061353a565b611659565b005b348015610558575f80fd5b506105616116a4565b005b34801561056e575f80fd5b506105896004803603810190610584919061386e565b611757565b005b348015610596575f80fd5b506105b160048036038101906105ac9190613a67565b611776565b005b3480156105be575f80fd5b506105d960048036038101906105d491906137f6565b61179b565b005b3480156105e6575f80fd5b5061060160048036038101906105fc919061353a565b6117b6565b60405161060e91906134c7565b60405180910390f35b348015610622575f80fd5b5061063d60048036038101906106389190613639565b6117cb565b60405161064a91906134c7565b60405180910390f35b34801561065e575f80fd5b5061067960048036038101906106749190613639565b611839565b6040516106869190613673565b60405180910390f35b34801561069a575f80fd5b506106b560048036038101906106b09190613abc565b6118bd565b005b3480156106c2575f80fd5b506106dd60048036038101906106d8919061353a565b61191f565b6040516106ea91906134c7565b60405180910390f35b3480156106fe575f80fd5b506107076119d3565b005b348015610714575f80fd5b5061072f600480360381019061072a9190613a67565b6119e6565b005b34801561073c575f80fd5b5061075760048036038101906107529190613639565b611a0b565b005b348015610764575f80fd5b5061076d611a1d565b60405161077a9190613673565b60405180910390f35b34801561078e575f80fd5b506107a960048036038101906107a49190613639565b611a44565b005b3480156107b6575f80fd5b506107bf611a56565b6040516107cc91906135ef565b60405180910390f35b3480156107e0575f80fd5b506107fb60048036038101906107f69190613639565b611ae6565b005b348015610808575f80fd5b50610811611af8565b60405161081e91906134c7565b60405180910390f35b348015610832575f80fd5b5061084d60048036038101906108489190613ae7565b611afe565b005b34801561085a575f80fd5b5061087560048036038101906108709190613639565b611b14565b6040516108829190613496565b60405180910390f35b348015610896575f80fd5b506108b160048036038101906108ac9190613bc3565b611b54565b005b3480156108be575f80fd5b506108d960048036038101906108d4919061353a565b611bb6565b6040516108e691906134c7565b60405180910390f35b3480156108fa575f80fd5b5061091560048036038101906109109190613639565b611bcb565b60405161092291906135ef565b60405180910390f35b348015610936575f80fd5b50610951600480360381019061094c919061353a565b611c71565b005b34801561095e575f80fd5b5061097960048036038101906109749190613c43565b611cbc565b6040516109869190613496565b60405180910390f35b34801561099a575f80fd5b506109a3611d4a565b6040516109b09190613855565b60405180910390f35b3480156109c4575f80fd5b506109df60048036038101906109da919061353a565b611d50565b005b5f7fb45a3c0e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a535750610a5282611dd2565b5b9050919050565b600f5481565b610a68611e4b565b8060165f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060018054610aba90613cae565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae690613cae565b8015610b315780601f10610b0857610100808354040283529160200191610b31565b820191905f5260205f20905b815481529060010190602001808311610b1457829003601f168201915b5050505050905090565b5f610b4582611ec9565b60055f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610b8782611839565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90613d4e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c16611f14565b73ffffffffffffffffffffffffffffffffffffffff161480610c455750610c4481610c3f611f14565b611cbc565b5b610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90613ddc565b60405180910390fd5b610c8e8383611f1b565b505050565b60105481565b5f610ca2611e4b565b47905090565b6002600b5403610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490613e44565b60405180910390fd5b6002600b81905550600c60019054906101000a900460ff16610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90613ed2565b60405180910390fd5b5f610d4d610fe8565b9050600e548110610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90613f3a565b60405180910390fd5b5f349050600d54811015610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390613fa2565b60405180910390fd5b5f339050600f5460135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e589061400a565b60405180910390fd5b600d54821115610ebd578073ffffffffffffffffffffffffffffffffffffffff166108fc600d5484610e939190614055565b90811502906040515f60405180830381858888f19350505050158015610ebb573d5f803e3d5ffd5b505b5f6001610ec8610fe8565b610ed29190614088565b90505f600d5490505f811115610f2f57610eeb82611fd1565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610f2d573d5f803e3d5ffd5b505b610f39838361208e565b600160135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610f869190614088565b92505081905550600c5f9054906101000a900460ff1615610fd9577f032bc66be43dbccb7487781d168eb7bda224628a3b2c3388bdf69b532a3a161182604051610fd091906134c7565b60405180910390a15b50505050506001600b81905550565b5f600980549050905090565b5f610ffd611e4b565b611006826120ab565b9050919050565b61101e611018611f14565b826120b8565b61105d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110549061412b565b60405180910390fd5b61106883838361214c565b505050565b60605f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d4906141b9565b60405180910390fd5b5f6110e78361191f565b90505f8167ffffffffffffffff811115611104576111036136d2565b5b6040519080825280602002602001820160405280156111325781602001602082028036833780820191505090505b5090505f5b828110156111b65760075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f205482828151811061119f5761119e6141d7565b5b602002602001018181525050806001019050611137565b508092505050919050565b5f6111cb8361191f565b821061120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120390614274565b60405180910390fd5b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b600e5481565b6002600b54036112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390613e44565b60405180910390fd5b6002600b81905550600e546112bf610fe8565b106112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613ed2565b60405180910390fd5b600c60029054906101000a900460ff1661134e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611345906142dc565b60405180910390fd5b5f33604051602001611360919061433f565b6040516020818303038152906040528051906020012090505f3390507fc0738076d720deb8a5bec36b3a6b1ffc387c3836b395d5788f4291e05104ed6482601154836040516113b193929190614359565b60405180910390a16113c7848460115485612438565b611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd906143d8565b60405180910390fd5b60105460145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410611487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147e90614440565b60405180910390fd5b5f349050600d548110156114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613fa2565b60405180910390fd5b600d5481111561152c578173ffffffffffffffffffffffffffffffffffffffff166108fc600d54836115029190614055565b90811502906040515f60405180830381858888f1935050505015801561152a573d5f803e3d5ffd5b505b5f600d5490505f600161153d610fe8565b6115479190614088565b90505f82111561159e5761155a81611fd1565b73ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f1935050505015801561159c573d5f803e3d5ffd5b505b6115a8848261208e565b600160145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546115f59190614088565b92505081905550600c5f9054906101000a900460ff1615611648577f032bc66be43dbccb7487781d168eb7bda224628a3b2c3388bdf69b532a3a16118160405161163f91906134c7565b60405180910390a15b50505050506001600b819055505050565b611661611e4b565b8060155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116ac611e4b565b5f3373ffffffffffffffffffffffffffffffffffffffff16476040516116d19061448b565b5f6040518083038185875af1925050503d805f811461170b576040519150601f19603f3d011682016040523d82523d5f602084013e611710565b606091505b5050905080611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b906144e9565b60405180910390fd5b50565b61177183838360405180602001604052805f815250611b54565b505050565b61177e611e4b565b80600c60016101000a81548160ff02191690831515021790555050565b6117a3611e4b565b80601290816117b291906146a4565b5050565b6013602052805f5260405f205f915090505481565b5f6117d4610fe8565b8210611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c906147e3565b60405180910390fd5b60098281548110611829576118286141d7565b5b905f5260205f2001549050919050565b5f8061184483612450565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ab9061484b565b60405180910390fd5b80915050919050565b6118c5611e4b565b600c60029054906101000a900460ff1615611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c906148b3565b60405180910390fd5b8060118190555050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906141b9565b60405180910390fd5b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6119db611e4b565b6119e45f612489565b565b6119ee611e4b565b80600c60026101000a81548160ff02191690831515021790555050565b611a13611e4b565b8060108190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a4c611e4b565b80600d8190555050565b606060028054611a6590613cae565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9190613cae565b8015611adc5780601f10611ab357610100808354040283529160200191611adc565b820191905f5260205f20905b815481529060010190602001808311611abf57829003601f168201915b5050505050905090565b611aee611e4b565b80600f8190555050565b600d5481565b611b10611b09611f14565b838361254a565b5050565b5f8073ffffffffffffffffffffffffffffffffffffffff16611b3583611839565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611b65611b5f611f14565b836120b8565b611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b9061412b565b60405180910390fd5b611bb0848484846126b1565b50505050565b6014602052805f5260405f205f915090505481565b6060611bd68261270d565b611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c90614941565b60405180910390fd5b5f60128054611c2390613cae565b905011611c3e5760405180602001604052805f815250611c6a565b6012611c498361274d565b604051602001611c5a929190614a3f565b6040516020818303038152906040525b9050919050565b611c79611e4b565b8060175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b60115481565b611d58611e4b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90614ae1565b60405180910390fd5b611dcf81612489565b50565b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e445750611e4382612817565b5b9050919050565b611e53611f14565b73ffffffffffffffffffffffffffffffffffffffff16611e71611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe90614b49565b60405180910390fd5b565b611ed28161270d565b611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f089061484b565b60405180910390fd5b50565b5f33905090565b8160055f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f8b83611839565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f80600383611fe09190614b94565b0361200e5760155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612089565b600160038361201d9190614b94565b0361204b5760165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612089565b600260038361205a9190614b94565b036120885760175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612089565b5b919050565b6120a7828260405180602001604052805f8152506128f8565b5050565b5f60208201519050919050565b5f806120c383611839565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061210557506121048185611cbc565b5b8061214357508373ffffffffffffffffffffffffffffffffffffffff1661212b84610b3b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661216c82611839565b73ffffffffffffffffffffffffffffffffffffffff16146121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b990614c34565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222790614cc2565b60405180910390fd5b61223d8383836001612952565b8273ffffffffffffffffffffffffffffffffffffffff1661225d82611839565b73ffffffffffffffffffffffffffffffffffffffff16146122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90614c34565b60405180910390fd5b60055f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540392505081905550600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124338383836001612aad565b505050565b5f82612445868685612afb565b149050949350505050565b5f60035f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af90614d2a565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126a49190613496565b60405180910390a3505050565b6126bc84848461214c565b6126c884848484612b4b565b612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fe90614db8565b60405180910390fd5b50505050565b5f8073ffffffffffffffffffffffffffffffffffffffff1661272e83612450565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60605f600161275b84612ccd565b0190505f8167ffffffffffffffff811115612779576127786136d2565b5b6040519080825280601f01601f1916602001820160405280156127ab5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561280c578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161280157612800614b67565b5b0494505f85036127b8575b819350505050919050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806128e157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806128f157506128f082612e1e565b5b9050919050565b6129028383612e87565b61290e5f848484612b4b565b61294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294490614db8565b60405180910390fd5b505050565b61295e8484848461309a565b60018111156129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299990614e46565b60405180910390fd5b5f8290505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036129e7576129e2816130a0565b612a26565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612a2557612a2485826130e4565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612a6757612a628161323a565b612aa6565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612aa557612aa484826132fa565b5b5b5050505050565b612aba8484846001613372565b7f5d439cf3a1f6215b41908e5b0b300f39679a3ff1cc010691c1d4ec4d0e2a4ebb848484604051612aed93929190614e64565b60405180910390a150505050565b5f808290505f5b85859050811015612b3f57612b3082878784818110612b2457612b236141d7565b5b90506020020135613385565b91508080600101915050612b02565b50809150509392505050565b5f612b6b8473ffffffffffffffffffffffffffffffffffffffff166133af565b15612cc0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b94611f14565b8786866040518563ffffffff1660e01b8152600401612bb69493929190614eeb565b6020604051808303815f875af1925050508015612bf157506040513d601f19601f82011682018060405250810190612bee9190614f49565b60015b612c70573d805f8114612c1f576040519150601f19603f3d011682016040523d82523d5f602084013e612c24565b606091505b505f815103612c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5f90614db8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cc5565b600190505b949350505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612d29577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612d1f57612d1e614b67565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612d66576d04ee2d6d415b85acef81000000008381612d5c57612d5b614b67565b5b0492506020810190505b662386f26fc100008310612d9557662386f26fc100008381612d8b57612d8a614b67565b5b0492506010810190505b6305f5e1008310612dbe576305f5e1008381612db457612db3614b67565b5b0492506008810190505b6127108310612de3576127108381612dd957612dd8614b67565b5b0492506004810190505b60648310612e065760648381612dfc57612dfb614b67565b5b0492506002810190505b600a8310612e15576001810190505b80915050919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eec90614fbe565b60405180910390fd5b612efe8161270d565b15612f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3590615026565b60405180910390fd5b612f4b5f83836001612952565b612f548161270d565b15612f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8b90615026565b60405180910390fd5b600160045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130965f83836001612aad565b5050565b50505050565b600980549050600a5f8381526020019081526020015f2081905550600981908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f60016130f08461191f565b6130fa9190614055565b90505f60085f8481526020019081526020015f205490508181146131d1575f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160085f8381526020019081526020015f2081905550505b60085f8481526020019081526020015f205f905560075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f600160098054905061324d9190614055565b90505f600a5f8481526020019081526020015f205490505f60098381548110613279576132786141d7565b5b905f5260205f20015490508060098381548110613299576132986141d7565b5b905f5260205f20018190555081600a5f8381526020019081526020015f2081905550600a5f8581526020019081526020015f205f905560098054806132e1576132e0615044565b5b600190038181905f5260205f20015f9055905550505050565b5f6133048361191f565b90508160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060085f8481526020019081526020015f2081905550505050565b61337f84848460016133d1565b50505050565b5f81831061339c5761339782846133d7565b6133a7565b6133a683836133d7565b5b905092915050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b50505050565b5f825f528160205260405f20905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613430816133fc565b811461343a575f80fd5b50565b5f8135905061344b81613427565b92915050565b5f60208284031215613466576134656133f4565b5b5f6134738482850161343d565b91505092915050565b5f8115159050919050565b6134908161347c565b82525050565b5f6020820190506134a95f830184613487565b92915050565b5f819050919050565b6134c1816134af565b82525050565b5f6020820190506134da5f8301846134b8565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613509826134e0565b9050919050565b613519816134ff565b8114613523575f80fd5b50565b5f8135905061353481613510565b92915050565b5f6020828403121561354f5761354e6133f4565b5b5f61355c84828501613526565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561359c578082015181840152602081019050613581565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135c182613565565b6135cb818561356f565b93506135db81856020860161357f565b6135e4816135a7565b840191505092915050565b5f6020820190508181035f83015261360781846135b7565b905092915050565b613618816134af565b8114613622575f80fd5b50565b5f813590506136338161360f565b92915050565b5f6020828403121561364e5761364d6133f4565b5b5f61365b84828501613625565b91505092915050565b61366d816134ff565b82525050565b5f6020820190506136865f830184613664565b92915050565b5f80604083850312156136a2576136a16133f4565b5b5f6136af85828601613526565b92505060206136c085828601613625565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613708826135a7565b810181811067ffffffffffffffff82111715613727576137266136d2565b5b80604052505050565b5f6137396133eb565b905061374582826136ff565b919050565b5f67ffffffffffffffff821115613764576137636136d2565b5b61376d826135a7565b9050602081019050919050565b828183375f83830152505050565b5f61379a6137958461374a565b613730565b9050828152602081018484840111156137b6576137b56136ce565b5b6137c184828561377a565b509392505050565b5f82601f8301126137dd576137dc6136ca565b5b81356137ed848260208601613788565b91505092915050565b5f6020828403121561380b5761380a6133f4565b5b5f82013567ffffffffffffffff811115613828576138276133f8565b5b613834848285016137c9565b91505092915050565b5f819050919050565b61384f8161383d565b82525050565b5f6020820190506138685f830184613846565b92915050565b5f805f60608486031215613885576138846133f4565b5b5f61389286828701613526565b93505060206138a386828701613526565b92505060406138b486828701613625565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6138f0816134af565b82525050565b5f61390183836138e7565b60208301905092915050565b5f602082019050919050565b5f613923826138be565b61392d81856138c8565b9350613938836138d8565b805f5b8381101561396857815161394f88826138f6565b975061395a8361390d565b92505060018101905061393b565b5085935050505092915050565b5f6020820190508181035f83015261398d8184613919565b905092915050565b5f80fd5b5f80fd5b5f8083601f8401126139b2576139b16136ca565b5b8235905067ffffffffffffffff8111156139cf576139ce613995565b5b6020830191508360208202830111156139eb576139ea613999565b5b9250929050565b5f8060208385031215613a0857613a076133f4565b5b5f83013567ffffffffffffffff811115613a2557613a246133f8565b5b613a318582860161399d565b92509250509250929050565b613a468161347c565b8114613a50575f80fd5b50565b5f81359050613a6181613a3d565b92915050565b5f60208284031215613a7c57613a7b6133f4565b5b5f613a8984828501613a53565b91505092915050565b613a9b8161383d565b8114613aa5575f80fd5b50565b5f81359050613ab681613a92565b92915050565b5f60208284031215613ad157613ad06133f4565b5b5f613ade84828501613aa8565b91505092915050565b5f8060408385031215613afd57613afc6133f4565b5b5f613b0a85828601613526565b9250506020613b1b85828601613a53565b9150509250929050565b5f67ffffffffffffffff821115613b3f57613b3e6136d2565b5b613b48826135a7565b9050602081019050919050565b5f613b67613b6284613b25565b613730565b905082815260208101848484011115613b8357613b826136ce565b5b613b8e84828561377a565b509392505050565b5f82601f830112613baa57613ba96136ca565b5b8135613bba848260208601613b55565b91505092915050565b5f805f8060808587031215613bdb57613bda6133f4565b5b5f613be887828801613526565b9450506020613bf987828801613526565b9350506040613c0a87828801613625565b925050606085013567ffffffffffffffff811115613c2b57613c2a6133f8565b5b613c3787828801613b96565b91505092959194509250565b5f8060408385031215613c5957613c586133f4565b5b5f613c6685828601613526565b9250506020613c7785828601613526565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613cc557607f821691505b602082108103613cd857613cd7613c81565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d3860218361356f565b9150613d4382613cde565b604082019050919050565b5f6020820190508181035f830152613d6581613d2c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f5f8201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b5f613dc6603d8361356f565b9150613dd182613d6c565b604082019050919050565b5f6020820190508181035f830152613df381613dba565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f613e2e601f8361356f565b9150613e3982613dfa565b602082019050919050565b5f6020820190508181035f830152613e5b81613e22565b9050919050565b7f4d696e7420416d6f756e74204578636565647320546f74616c20416c6c6f77655f8201527f64204d696e747300000000000000000000000000000000000000000000000000602082015250565b5f613ebc60278361356f565b9150613ec782613e62565b604082019050919050565b5f6020820190508181035f830152613ee981613eb0565b9050919050565b7f46756c6c204e6f770000000000000000000000000000000000000000000000005f82015250565b5f613f2460088361356f565b9150613f2f82613ef0565b602082019050919050565b5f6020820190508181035f830152613f5181613f18565b9050919050565b7f496e73756666696369656e74207061796d656e7420616d6f756e7400000000005f82015250565b5f613f8c601b8361356f565b9150613f9782613f58565b602082019050919050565b5f6020820190508181035f830152613fb981613f80565b9050919050565b7f4d696e7420416d6f756e74204c696d69740000000000000000000000000000005f82015250565b5f613ff460118361356f565b9150613fff82613fc0565b602082019050919050565b5f6020820190508181035f83015261402181613fe8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61405f826134af565b915061406a836134af565b925082820390508181111561408257614081614028565b5b92915050565b5f614092826134af565b915061409d836134af565b92508282019050808211156140b5576140b4614028565b5b92915050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e655f8201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b5f614115602d8361356f565b9150614120826140bb565b604082019050919050565b5f6020820190508181035f83015261414281614109565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f7420612076615f8201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b5f6141a360298361356f565b91506141ae82614149565b604082019050919050565b5f6020820190508181035f8301526141d081614197565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f455243373231456e756d657261626c653a206f776e657220696e646578206f755f8201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b5f61425e602b8361356f565b915061426982614204565b604082019050919050565b5f6020820190508181035f83015261428b81614252565b9050919050565b7f57686974656c697374204d696e74204e6f7420416374697665000000000000005f82015250565b5f6142c660198361356f565b91506142d182614292565b602082019050919050565b5f6020820190508181035f8301526142f3816142ba565b9050919050565b5f8160601b9050919050565b5f614310826142fa565b9050919050565b5f61432182614306565b9050919050565b614339614334826134ff565b614317565b82525050565b5f61434a8284614328565b60148201915081905092915050565b5f60608201905061436c5f830186613846565b6143796020830185613846565b6143866040830184613664565b949350505050565b7f4164647265737320646f6573206e6f7420657869737420696e206c69737400005f82015250565b5f6143c2601e8361356f565b91506143cd8261438e565b602082019050919050565b5f6020820190508181035f8301526143ef816143b6565b9050919050565b7f5748495445204d696e7420416d6f756e74204c696d69740000000000000000005f82015250565b5f61442a60178361356f565b9150614435826143f6565b602082019050919050565b5f6020820190508181035f8301526144578161441e565b9050919050565b5f81905092915050565b50565b5f6144765f8361445e565b915061448182614468565b5f82019050919050565b5f6144958261446b565b9150819050919050565b7f5769746864726177206661696c65642e000000000000000000000000000000005f82015250565b5f6144d360108361356f565b91506144de8261449f565b602082019050919050565b5f6020820190508181035f830152614500816144c7565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026145637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614528565b61456d8683614528565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6145a86145a361459e846134af565b614585565b6134af565b9050919050565b5f819050919050565b6145c18361458e565b6145d56145cd826145af565b848454614534565b825550505050565b5f90565b6145e96145dd565b6145f48184846145b8565b505050565b5b818110156146175761460c5f826145e1565b6001810190506145fa565b5050565b601f82111561465c5761462d81614507565b61463684614519565b81016020851015614645578190505b61465961465185614519565b8301826145f9565b50505b505050565b5f82821c905092915050565b5f61467c5f1984600802614661565b1980831691505092915050565b5f614694838361466d565b9150826002028217905092915050565b6146ad82613565565b67ffffffffffffffff8111156146c6576146c56136d2565b5b6146d08254613cae565b6146db82828561461b565b5f60209050601f83116001811461470c575f84156146fa578287015190505b6147048582614689565b86555061476b565b601f19841661471a86614507565b5f5b828110156147415784890151825560018201915060208501945060208101905061471c565b8683101561475e578489015161475a601f89168261466d565b8355505b6001600288020188555050505b505050505050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f5f8201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b5f6147cd602c8361356f565b91506147d882614773565b604082019050919050565b5f6020820190508181035f8301526147fa816147c1565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e20494400000000000000005f82015250565b5f61483560188361356f565b915061484082614801565b602082019050919050565b5f6020820190508181035f83015261486281614829565b9050919050565b7f57686974656c697374204d696e74696e67204e6f742044697361626c656400005f82015250565b5f61489d601e8361356f565b91506148a882614869565b602082019050919050565b5f6020820190508181035f8301526148ca81614891565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f61492b602f8361356f565b9150614936826148d1565b604082019050919050565b5f6020820190508181035f8301526149588161491f565b9050919050565b5f81905092915050565b5f815461497581613cae565b61497f818661495f565b9450600182165f811461499957600181146149ae576149e0565b60ff19831686528115158202860193506149e0565b6149b785614507565b5f5b838110156149d8578154818901526001820191506020810190506149b9565b838801955050505b50505092915050565b5f6149f382613565565b6149fd818561495f565b9350614a0d81856020860161357f565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815250565b5f614a4a8285614969565b9150614a5682846149e9565b9150614a6182614a19565b6005820191508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614acb60268361356f565b9150614ad682614a71565b604082019050919050565b5f6020820190508181035f830152614af881614abf565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614b3360208361356f565b9150614b3e82614aff565b602082019050919050565b5f6020820190508181035f830152614b6081614b27565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614b9e826134af565b9150614ba9836134af565b925082614bb957614bb8614b67565b5b828206905092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f7272656374205f8201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b5f614c1e60258361356f565b9150614c2982614bc4565b604082019050919050565b5f6020820190508181035f830152614c4b81614c12565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614cac60248361356f565b9150614cb782614c52565b604082019050919050565b5f6020820190508181035f830152614cd981614ca0565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f614d1460198361356f565b9150614d1f82614ce0565b602082019050919050565b5f6020820190508181035f830152614d4181614d08565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f614da260328361356f565b9150614dad82614d48565b604082019050919050565b5f6020820190508181035f830152614dcf81614d96565b9050919050565b7f455243373231456e756d657261626c653a20636f6e73656375746976652074725f8201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b5f614e3060358361356f565b9150614e3b82614dd6565b604082019050919050565b5f6020820190508181035f830152614e5d81614e24565b9050919050565b5f606082019050614e775f830186613664565b614e846020830185613664565b614e9160408301846134b8565b949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f614ebd82614e99565b614ec78185614ea3565b9350614ed781856020860161357f565b614ee0816135a7565b840191505092915050565b5f608082019050614efe5f830187613664565b614f0b6020830186613664565b614f1860408301856134b8565b8181036060830152614f2a8184614eb3565b905095945050505050565b5f81519050614f4381613427565b92915050565b5f60208284031215614f5e57614f5d6133f4565b5b5f614f6b84828501614f35565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f614fa860208361356f565b9150614fb382614f74565b602082019050919050565b5f6020820190508181035f830152614fd581614f9c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f615010601c8361356f565b915061501b82614fdc565b602082019050919050565b5f6020820190508181035f83015261503d81615004565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea264697066735822122011fcf31b066a6605e45e15765d9182a019f126f9c589260006356568224e247b64736f6c63430008180033