60806040526103e8600e55348015610015575f5ffd5b50604051614f1f380380614f1f8339818101604052810190610037919061077c565b6040518060400160405280600981526020017f526574617264696f7300000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f52000000000000000000000000000000000000000000000000000000000000008152506100bf6100b461011760201b60201c565b61011e60201b60201c565b81600490816100ce91906109db565b5080600590816100de91906109db565b5050506100f133826101df60201b60201c565b6127106005826101019190610ad7565b61010b9190610b45565b60078190555050610d80565b5f33905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361024d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024490610bcf565b60405180910390fd5b61025e5f838361034360201b60201c565b8060035f82825461026f9190610bed565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546102c29190610bed565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516103269190610c2f565b60405180910390a361033f5f83836106ca60201b60201c565b5050565b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156103e15750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b610420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041790610c92565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610537576104826106cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806104f357506104c46106cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052990610cfa565b60405180910390fd5b6106c5565b60065f9054906101000a900460ff16801561059e575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156106c4575f6105b26106f660201b60201c565b905061271060c8826105c49190610ad7565b6105ce9190610b45565b600754101561063d57606460af6007546105e89190610ad7565b6105f29190610b45565b60078190555061271060c8826106089190610ad7565b6106129190610b45565b600754111561063c5761271060c88261062b9190610ad7565b6106359190610b45565b6007819055505b5b60075482610650856106ff60201b60201c565b61065a9190610bed565b11158015610683575060085482610676856106ff60201b60201c565b6106809190610bed565b10155b6106c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b990610d62565b60405180910390fd5b505b5b505050565b505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f600354905090565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f5ffd5b5f819050919050565b61075b81610749565b8114610765575f5ffd5b50565b5f8151905061077681610752565b92915050565b5f6020828403121561079157610790610745565b5b5f61079e84828501610768565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061082257607f821691505b602082108103610835576108346107de565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026108977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261085c565b6108a1868361085c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6108dc6108d76108d284610749565b6108b9565b610749565b9050919050565b5f819050919050565b6108f5836108c2565b610909610901826108e3565b848454610868565b825550505050565b5f5f905090565b610920610911565b61092b8184846108ec565b505050565b5b8181101561094e576109435f82610918565b600181019050610931565b5050565b601f821115610993576109648161083b565b61096d8461084d565b8101602085101561097c578190505b6109906109888561084d565b830182610930565b50505b505050565b5f82821c905092915050565b5f6109b35f1984600802610998565b1980831691505092915050565b5f6109cb83836109a4565b9150826002028217905092915050565b6109e4826107a7565b67ffffffffffffffff8111156109fd576109fc6107b1565b5b610a07825461080b565b610a12828285610952565b5f60209050601f831160018114610a43575f8415610a31578287015190505b610a3b85826109c0565b865550610aa2565b601f198416610a518661083b565b5f5b82811015610a7857848901518255600182019150602085019450602081019050610a53565b86831015610a955784890151610a91601f8916826109a4565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610ae182610749565b9150610aec83610749565b9250828202610afa81610749565b91508282048414831517610b1157610b10610aaa565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610b4f82610749565b9150610b5a83610749565b925082610b6a57610b69610b18565b5b828204905092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610bb9601f83610b75565b9150610bc482610b85565b602082019050919050565b5f6020820190508181035f830152610be681610bad565b9050919050565b5f610bf782610749565b9150610c0283610749565b9250828201905080821115610c1a57610c19610aaa565b5b92915050565b610c2981610749565b82525050565b5f602082019050610c425f830184610c20565b92915050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f610c7c600b83610b75565b9150610c8782610c48565b602082019050919050565b5f6020820190508181035f830152610ca981610c70565b9050919050565b7f54726164696e67206973206e6f742073746172746564000000000000000000005f82015250565b5f610ce4601683610b75565b9150610cef82610cb0565b602082019050919050565b5f6020820190508181035f830152610d1181610cd8565b9050919050565b7f5472616e73666572206578636565647320686f6c64696e67206c696d697473005f82015250565b5f610d4c601f83610b75565b9150610d5782610d18565b602082019050919050565b5f6020820190508181035f830152610d7981610d40565b9050919050565b61419280610d8d5f395ff3fe608060405234801561000f575f5ffd5b50600436106103cd575f3560e01c8063714220b2116101fd578063af504def11610118578063d5a42606116100ab578063f2fde38b1161007a578063f2fde38b14610b8f578063f8b9b32d14610bab578063f8c7338914610bc7578063fe94399c14610be3576103cd565b8063d5a4260614610af4578063dd62ed3e14610b25578063dde415fa14610b55578063eba6868f14610b73576103cd565b8063bbdfa2e0116100e7578063bbdfa2e014610a84578063c28a559214610aa0578063c6e986f114610abc578063ca2bb91314610ad8576103cd565b8063af504def146109fc578063b42dfa0d14610a1a578063b4377a3e14610a38578063b4f243a414610a54576103cd565b806394c0c14911610190578063a457c2d71161015f578063a457c2d714610962578063a49a174614610992578063a6083d6c146109b0578063a9059cbb146109cc576103cd565b806394c0c149146108db57806395d89b41146108f75780639873d6951461091557806398bafaa314610931576103cd565b8063860a32ec116101cc578063860a32ec1461086357806389f9a1d3146108815780638da5cb5b1461089f5780638fdada4a146108bd576103cd565b8063714220b2146107ee578063715018a61461080c57806373ebaf7314610816578063750e8d1014610832576103cd565b8063313ce567116102ed578063404e5129116102805780634d7e7e9d1161024f5780634d7e7e9d1461076a57806360fa41d8146107865780636473603d146107a257806370a08231146107be576103cd565b8063404e5129146106f857806342966c6814610714578063439a9b131461073057806349bd5a5e1461074c576103cd565b806339509351116102bc57806339509351146106725780633aa633aa146106a25780633cb5bd27146106be5780633f26479e146106da576103cd565b8063313ce567146105eb578063369e6c641461060957806337d9a4e8146106255780633860a39314610641576103cd565b80631ab99e12116103655780632b4df9b2116103345780632b4df9b2146105795780632bd09fe4146105955780632d12d34b146105b15780632de9375b146105cf576103cd565b80631ab99e12146104f357806321ca34da1461051157806323b872dd1461052d578063284e5ca21461055d576103cd565b8063095ea7b3116103a1578063095ea7b31461045957806316c021291461048957806318160ddd146104b957806319135f94146104d7576103cd565b80629ca97d146103d1578063018a3741146103ed5780630568e65e1461040b57806306fdde031461043b575b5f5ffd5b6103eb60048036038101906103e6919061316f565b610bff565b005b6103f5610c85565b60405161040291906131a9565b60405180910390f35b6104256004803603810190610420919061321c565b610c8b565b60405161043291906131a9565b60405180910390f35b610443610ca0565b60405161045091906132b7565b60405180910390f35b610473600480360381019061046e91906132d7565b610d30565b604051610480919061332f565b60405180910390f35b6104a3600480360381019061049e919061321c565b610d4d565b6040516104b0919061332f565b60405180910390f35b6104c1610d6a565b6040516104ce91906131a9565b60405180910390f35b6104f160048036038101906104ec919061316f565b610d73565b005b6104fb610df9565b60405161050891906131a9565b60405180910390f35b61052b6004803603810190610526919061316f565b610dff565b005b61054760048036038101906105429190613348565b610e85565b604051610554919061332f565b60405180910390f35b6105776004803603810190610572919061316f565b610f77565b005b610593600480360381019061058e919061316f565b610ffd565b005b6105af60048036038101906105aa919061316f565b611083565b005b6105b9611109565b6040516105c691906131a9565b60405180910390f35b6105e960048036038101906105e4919061316f565b61110e565b005b6105f3611194565b60405161060091906133b3565b60405180910390f35b610623600480360381019061061e919061316f565b61119c565b005b61063f600480360381019061063a919061316f565b611222565b005b61065b600480360381019061065691906133cc565b6112a8565b6040516106699291906134c1565b60405180910390f35b61068c600480360381019061068791906132d7565b61142a565b604051610699919061332f565b60405180910390f35b6106bc60048036038101906106b79190613519565b6114d1565b005b6106d860048036038101906106d3919061316f565b6115ba565b005b6106e2611640565b6040516106ef91906131a9565b60405180910390f35b610712600480360381019061070d919061357d565b611646565b005b61072e6004803603810190610729919061316f565b61171a565b005b61074a6004803603810190610745919061316f565b611727565b005b6107546117ad565b60405161076191906135ca565b60405180910390f35b610784600480360381019061077f919061316f565b6117d2565b005b6107a0600480360381019061079b919061316f565b611858565b005b6107bc60048036038101906107b7919061316f565b6118de565b005b6107d860048036038101906107d3919061321c565b611964565b6040516107e591906131a9565b60405180910390f35b6107f66119aa565b60405161080391906131a9565b60405180910390f35b6108146119af565b005b610830600480360381019061082b919061316f565b611a36565b005b61084c600480360381019061084791906135e3565b611abc565b60405161085a929190613736565b60405180910390f35b61086b611b4c565b604051610878919061332f565b60405180910390f35b610889611b5e565b60405161089691906131a9565b60405180910390f35b6108a7611b64565b6040516108b491906135ca565b60405180910390f35b6108c5611b8b565b6040516108d291906131a9565b60405180910390f35b6108f560048036038101906108f0919061316f565b611b91565b005b6108ff611c17565b60405161090c91906132b7565b60405180910390f35b61092f600480360381019061092a919061316f565b611ca7565b005b61094b600480360381019061094691906135e3565b611d2d565b604051610959929190613736565b60405180910390f35b61097c600480360381019061097791906132d7565b611dbd565b604051610989919061332f565b60405180910390f35b61099a611ea3565b6040516109a791906131a9565b60405180910390f35b6109ca60048036038101906109c5919061316f565b611ea8565b005b6109e660048036038101906109e191906132d7565b611f2e565b6040516109f3919061332f565b60405180910390f35b610a04611f4b565b604051610a1191906131a9565b60405180910390f35b610a22611f51565b604051610a2f91906131a9565b60405180910390f35b610a526004803603810190610a4d9190613764565b611f57565b005b610a6e6004803603810190610a6991906132d7565b611fe5565b604051610a7b91906132b7565b60405180910390f35b610a9e6004803603810190610a99919061316f565b611fed565b005b610aba6004803603810190610ab5919061316f565b612073565b005b610ad66004803603810190610ad1919061316f565b6120f9565b005b610af26004803603810190610aed919061316f565b61217f565b005b610b0e6004803603810190610b0991906135e3565b612205565b604051610b1c929190613736565b60405180910390f35b610b3f6004803603810190610b3a91906137a2565b61234b565b604051610b4c91906131a9565b60405180910390f35b610b5d6123cd565b604051610b6a91906131a9565b60405180910390f35b610b8d6004803603810190610b88919061316f565b6123d3565b005b610ba96004803603810190610ba4919061321c565b612459565b005b610bc56004803603810190610bc0919061316f565b61254f565b005b610be16004803603810190610bdc919061316f565b6125d5565b005b610bfd6004803603810190610bf8919061316f565b61265b565b005b610c076126e1565b73ffffffffffffffffffffffffffffffffffffffff16610c25611b64565b73ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c729061382a565b60405180910390fd5b8060178190555050565b600d5481565b600f602052805f5260405f205f915090505481565b606060048054610caf90613875565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdb90613875565b8015610d265780601f10610cfd57610100808354040283529160200191610d26565b820191905f5260205f20905b815481529060010190602001808311610d0957829003601f168201915b5050505050905090565b5f610d43610d3c6126e1565b84846126e8565b6001905092915050565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f600354905090565b610d7b6126e1565b73ffffffffffffffffffffffffffffffffffffffff16610d99611b64565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de69061382a565b60405180910390fd5b80601c8190555050565b60085481565b610e076126e1565b73ffffffffffffffffffffffffffffffffffffffff16610e25611b64565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e729061382a565b60405180910390fd5b8060208190555050565b5f610e918484846128ab565b5f60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610ed86126e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4e90613915565b60405180910390fd5b610f6b85610f636126e1565b8584036126e8565b60019150509392505050565b610f7f6126e1565b73ffffffffffffffffffffffffffffffffffffffff16610f9d611b64565b73ffffffffffffffffffffffffffffffffffffffff1614610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea9061382a565b60405180910390fd5b8060258190555050565b6110056126e1565b73ffffffffffffffffffffffffffffffffffffffff16611023611b64565b73ffffffffffffffffffffffffffffffffffffffff1614611079576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110709061382a565b60405180910390fd5b8060268190555050565b61108b6126e1565b73ffffffffffffffffffffffffffffffffffffffff166110a9611b64565b73ffffffffffffffffffffffffffffffffffffffff16146110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f69061382a565b60405180910390fd5b8060238190555050565b600181565b6111166126e1565b73ffffffffffffffffffffffffffffffffffffffff16611134611b64565b73ffffffffffffffffffffffffffffffffffffffff161461118a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111819061382a565b60405180910390fd5b80601e8190555050565b5f6012905090565b6111a46126e1565b73ffffffffffffffffffffffffffffffffffffffff166111c2611b64565b73ffffffffffffffffffffffffffffffffffffffff1614611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f9061382a565b60405180910390fd5b8060248190555050565b61122a6126e1565b73ffffffffffffffffffffffffffffffffffffffff16611248611b64565b73ffffffffffffffffffffffffffffffffffffffff161461129e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112959061382a565b60405180910390fd5b80602a8190555050565b5f6060600d548410611307575f5f67ffffffffffffffff8111156112cf576112ce613933565b5b6040519080825280602002602001820160405280156112fd5781602001602082028036833780820191505090505b5091509150611423565b5f8385611314919061398d565b9050600d5481111561132657600d5490505b848161133291906139c0565b92508267ffffffffffffffff81111561134e5761134d613933565b5b60405190808252806020026020018201604052801561137c5781602001602082028036833780820191505090505b5091505f8590505b8381101561142057600b5f828861139b919061398d565b81526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168382815181106113db576113da6139f3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050806001019050611384565b50505b9250929050565b5f6114c76114366126e1565b848460025f6114436126e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114c2919061398d565b6126e8565b6001905092915050565b6114d96126e1565b73ffffffffffffffffffffffffffffffffffffffff166114f7611b64565b73ffffffffffffffffffffffffffffffffffffffff161461154d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115449061382a565b60405180910390fd5b8360065f6101000a81548160ff0219169083151502179055508260095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816007819055508060088190555050505050565b6115c26126e1565b73ffffffffffffffffffffffffffffffffffffffff166115e0611b64565b73ffffffffffffffffffffffffffffffffffffffff1614611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d9061382a565b60405180910390fd5b8060198190555050565b61271081565b61164e6126e1565b73ffffffffffffffffffffffffffffffffffffffff1661166c611b64565b73ffffffffffffffffffffffffffffffffffffffff16146116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b99061382a565b60405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6117243382612b23565b50565b61172f6126e1565b73ffffffffffffffffffffffffffffffffffffffff1661174d611b64565b73ffffffffffffffffffffffffffffffffffffffff16146117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a9061382a565b60405180910390fd5b8060288190555050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117da6126e1565b73ffffffffffffffffffffffffffffffffffffffff166117f8611b64565b73ffffffffffffffffffffffffffffffffffffffff161461184e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118459061382a565b60405180910390fd5b80602b8190555050565b6118606126e1565b73ffffffffffffffffffffffffffffffffffffffff1661187e611b64565b73ffffffffffffffffffffffffffffffffffffffff16146118d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cb9061382a565b60405180910390fd5b8060278190555050565b6118e66126e1565b73ffffffffffffffffffffffffffffffffffffffff16611904611b64565b73ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119519061382a565b60405180910390fd5b8060138190555050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60c881565b6119b76126e1565b73ffffffffffffffffffffffffffffffffffffffff166119d5611b64565b73ffffffffffffffffffffffffffffffffffffffff1614611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a229061382a565b60405180910390fd5b611a345f612cf1565b565b611a3e6126e1565b73ffffffffffffffffffffffffffffffffffffffff16611a5c611b64565b73ffffffffffffffffffffffffffffffffffffffff1614611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa99061382a565b60405180910390fd5b8060298190555050565b5f60605f600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8486611b0d919061398d565b905081811115611b1b578190505b8581611b2791906139c0565b93505f5f90505b84811015611b4157806001019050611b2e565b505050935093915050565b60065f9054906101000a900460ff1681565b60075481565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103e881565b611b996126e1565b73ffffffffffffffffffffffffffffffffffffffff16611bb7611b64565b73ffffffffffffffffffffffffffffffffffffffff1614611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c049061382a565b60405180910390fd5b8060228190555050565b606060058054611c2690613875565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5290613875565b8015611c9d5780601f10611c7457610100808354040283529160200191611c9d565b820191905f5260205f20905b815481529060010190602001808311611c8057829003601f168201915b5050505050905090565b611caf6126e1565b73ffffffffffffffffffffffffffffffffffffffff16611ccd611b64565b73ffffffffffffffffffffffffffffffffffffffff1614611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a9061382a565b60405180910390fd5b8060168190555050565b5f60605f600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8486611d7e919061398d565b905081811115611d8c578190505b8581611d9891906139c0565b93505f5f90505b84811015611db257806001019050611d9f565b505050935093915050565b5f5f60025f611dca6126e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7b90613a90565b60405180910390fd5b611e98611e8f6126e1565b858584036126e8565b600191505092915050565b600581565b611eb06126e1565b73ffffffffffffffffffffffffffffffffffffffff16611ece611b64565b73ffffffffffffffffffffffffffffffffffffffff1614611f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1b9061382a565b60405180910390fd5b80601f8190555050565b5f611f41611f3a6126e1565b84846128ab565b6001905092915050565b60105481565b600e5481565b600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548210611fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcd90613af8565b60405180910390fd5b611fe1338383612db2565b5050565b606092915050565b611ff56126e1565b73ffffffffffffffffffffffffffffffffffffffff16612013611b64565b73ffffffffffffffffffffffffffffffffffffffff1614612069576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120609061382a565b60405180910390fd5b8060188190555050565b61207b6126e1565b73ffffffffffffffffffffffffffffffffffffffff16612099611b64565b73ffffffffffffffffffffffffffffffffffffffff16146120ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e69061382a565b60405180910390fd5b80601b8190555050565b6121016126e1565b73ffffffffffffffffffffffffffffffffffffffff1661211f611b64565b73ffffffffffffffffffffffffffffffffffffffff1614612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c9061382a565b60405180910390fd5b8060148190555050565b6121876126e1565b73ffffffffffffffffffffffffffffffffffffffff166121a5611b64565b73ffffffffffffffffffffffffffffffffffffffff16146121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f29061382a565b60405180910390fd5b80601a8190555050565b5f60605f600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508085106122a9575f5f67ffffffffffffffff81111561226b5761226a613933565b5b60405190808252806020026020018201604052801561229e57816020015b60608152602001906001900390816122895790505b509250925050612343565b5f84866122b6919061398d565b9050818111156122d25781905080866122cf91906139c0565b93505b8367ffffffffffffffff8111156122ec576122eb613933565b5b60405190808252806020026020018201604052801561231f57816020015b606081526020019060019003908161230a5790505b5092505f5f5f90508791505b8282101561233e5781600101915061232b565b505050505b935093915050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6103e881565b6123db6126e1565b73ffffffffffffffffffffffffffffffffffffffff166123f9611b64565b73ffffffffffffffffffffffffffffffffffffffff161461244f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124469061382a565b60405180910390fd5b80601d8190555050565b6124616126e1565b73ffffffffffffffffffffffffffffffffffffffff1661247f611b64565b73ffffffffffffffffffffffffffffffffffffffff16146124d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc9061382a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a90613b86565b60405180910390fd5b61254c81612cf1565b50565b6125576126e1565b73ffffffffffffffffffffffffffffffffffffffff16612575611b64565b73ffffffffffffffffffffffffffffffffffffffff16146125cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c29061382a565b60405180910390fd5b8060128190555050565b6125dd6126e1565b73ffffffffffffffffffffffffffffffffffffffff166125fb611b64565b73ffffffffffffffffffffffffffffffffffffffff1614612651576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126489061382a565b60405180910390fd5b8060218190555050565b6126636126e1565b73ffffffffffffffffffffffffffffffffffffffff16612681611b64565b73ffffffffffffffffffffffffffffffffffffffff16146126d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ce9061382a565b60405180910390fd5b8060158190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274d90613c14565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bb90613ca2565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161289e91906131a9565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291090613d30565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297e90613dbe565b60405180910390fd5b612992838383612dca565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90613e4c565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612aa6919061398d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b0a91906131a9565b60405180910390a3612b1d848484613133565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8890613eda565b60405180910390fd5b612b9c825f83612dca565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1790613f68565b60405180910390fd5b81810360015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160035f828254612c7591906139c0565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cd991906131a9565b60405180910390a3612cec835f84613133565b505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60405180602001604052805f815250905050505050565b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612e685750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9e90613fd0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612fb257612f03611b64565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612f6e5750612f3f611b64565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b612fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa490614038565b60405180910390fd5b61312e565b60065f9054906101000a900460ff168015613019575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561312d575f613027610d6a565b905061271060c8826130399190614056565b61304391906140c4565b60075410156130b257606460af60075461305d9190614056565b61306791906140c4565b60078190555061271060c88261307d9190614056565b61308791906140c4565b60075411156130b15761271060c8826130a09190614056565b6130aa91906140c4565b6007819055505b5b600754826130bf85611964565b6130c9919061398d565b111580156130ec5750600854826130df85611964565b6130e9919061398d565b10155b61312b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131229061413e565b60405180910390fd5b505b5b505050565b505050565b5f5ffd5b5f819050919050565b61314e8161313c565b8114613158575f5ffd5b50565b5f8135905061316981613145565b92915050565b5f6020828403121561318457613183613138565b5b5f6131918482850161315b565b91505092915050565b6131a38161313c565b82525050565b5f6020820190506131bc5f83018461319a565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6131eb826131c2565b9050919050565b6131fb816131e1565b8114613205575f5ffd5b50565b5f81359050613216816131f2565b92915050565b5f6020828403121561323157613230613138565b5b5f61323e84828501613208565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61328982613247565b6132938185613251565b93506132a3818560208601613261565b6132ac8161326f565b840191505092915050565b5f6020820190508181035f8301526132cf818461327f565b905092915050565b5f5f604083850312156132ed576132ec613138565b5b5f6132fa85828601613208565b925050602061330b8582860161315b565b9150509250929050565b5f8115159050919050565b61332981613315565b82525050565b5f6020820190506133425f830184613320565b92915050565b5f5f5f6060848603121561335f5761335e613138565b5b5f61336c86828701613208565b935050602061337d86828701613208565b925050604061338e8682870161315b565b9150509250925092565b5f60ff82169050919050565b6133ad81613398565b82525050565b5f6020820190506133c65f8301846133a4565b92915050565b5f5f604083850312156133e2576133e1613138565b5b5f6133ef8582860161315b565b92505060206134008582860161315b565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61343c816131e1565b82525050565b5f61344d8383613433565b60208301905092915050565b5f602082019050919050565b5f61346f8261340a565b6134798185613414565b935061348483613424565b805f5b838110156134b457815161349b8882613442565b97506134a683613459565b925050600181019050613487565b5085935050505092915050565b5f6040820190506134d45f83018561319a565b81810360208301526134e68184613465565b90509392505050565b6134f881613315565b8114613502575f5ffd5b50565b5f81359050613513816134ef565b92915050565b5f5f5f5f6080858703121561353157613530613138565b5b5f61353e87828801613505565b945050602061354f87828801613208565b93505060406135608782880161315b565b92505060606135718782880161315b565b91505092959194509250565b5f5f6040838503121561359357613592613138565b5b5f6135a085828601613208565b92505060206135b185828601613505565b9150509250929050565b6135c4816131e1565b82525050565b5f6020820190506135dd5f8301846135bb565b92915050565b5f5f5f606084860312156135fa576135f9613138565b5b5f61360786828701613208565b93505060206136188682870161315b565b92505060406136298682870161315b565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f61367682613247565b613680818561365c565b9350613690818560208601613261565b6136998161326f565b840191505092915050565b5f6136af838361366c565b905092915050565b5f602082019050919050565b5f6136cd82613633565b6136d7818561363d565b9350836020820285016136e98561364d565b805f5b85811015613724578484038952815161370585826136a4565b9450613710836136b7565b925060208a019950506001810190506136ec565b50829750879550505050505092915050565b5f6040820190506137495f83018561319a565b818103602083015261375b81846136c3565b90509392505050565b5f5f6040838503121561377a57613779613138565b5b5f6137878582860161315b565b925050602061379885828601613208565b9150509250929050565b5f5f604083850312156137b8576137b7613138565b5b5f6137c585828601613208565b92505060206137d685828601613208565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613814602083613251565b915061381f826137e0565b602082019050919050565b5f6020820190508181035f83015261384181613808565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061388c57607f821691505b60208210810361389f5761389e613848565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6138ff602883613251565b915061390a826138a5565b604082019050919050565b5f6020820190508181035f83015261392c816138f3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6139978261313c565b91506139a28361313c565b92508282019050808211156139ba576139b9613960565b5b92915050565b5f6139ca8261313c565b91506139d58361313c565b92508282039050818111156139ed576139ec613960565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613a7a602583613251565b9150613a8582613a20565b604082019050919050565b5f6020820190508181035f830152613aa781613a6e565b9050919050565b7f696e636f727265637420696e64657800000000000000000000000000000000005f82015250565b5f613ae2600f83613251565b9150613aed82613aae565b602082019050919050565b5f6020820190508181035f830152613b0f81613ad6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613b70602683613251565b9150613b7b82613b16565b604082019050919050565b5f6020820190508181035f830152613b9d81613b64565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613bfe602483613251565b9150613c0982613ba4565b604082019050919050565b5f6020820190508181035f830152613c2b81613bf2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c8c602283613251565b9150613c9782613c32565b604082019050919050565b5f6020820190508181035f830152613cb981613c80565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613d1a602583613251565b9150613d2582613cc0565b604082019050919050565b5f6020820190508181035f830152613d4781613d0e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613da8602383613251565b9150613db382613d4e565b604082019050919050565b5f6020820190508181035f830152613dd581613d9c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613e36602683613251565b9150613e4182613ddc565b604082019050919050565b5f6020820190508181035f830152613e6381613e2a565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ec4602183613251565b9150613ecf82613e6a565b604082019050919050565b5f6020820190508181035f830152613ef181613eb8565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f52602283613251565b9150613f5d82613ef8565b604082019050919050565b5f6020820190508181035f830152613f7f81613f46565b9050919050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f613fba600b83613251565b9150613fc582613f86565b602082019050919050565b5f6020820190508181035f830152613fe781613fae565b9050919050565b7f54726164696e67206973206e6f742073746172746564000000000000000000005f82015250565b5f614022601683613251565b915061402d82613fee565b602082019050919050565b5f6020820190508181035f83015261404f81614016565b9050919050565b5f6140608261313c565b915061406b8361313c565b92508282026140798161313c565b915082820484148315176140905761408f613960565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6140ce8261313c565b91506140d98361313c565b9250826140e9576140e8614097565b5b828204905092915050565b7f5472616e73666572206578636565647320686f6c64696e67206c696d697473005f82015250565b5f614128601f83613251565b9150614133826140f4565b602082019050919050565b5f6020820190508181035f8301526141558161411c565b905091905056fea2646970667358221220711992f8d53e23f1d35a7886369afe8b8ee0f7ca80e10b27dc345bf777cede2064736f6c634300081c0033000000000000000000000000000000000000000000000e9c7f5bd65501200000